Version 18 (modified by 15 years ago) (diff) | ,
---|
API開発プロジェクト
はじめに
外部からOpenPNEのデータを取得したり、操作するためのAPIを開発するプロジェクトです。 ニーズのありそうなAPIから順に開発をしていく予定です。
APIのインタフェースとしてはさまざま有りますが、まずは数を増やすことを優先し、 既存のXML_RPC方式を踏襲する方針を考えています。
#その他のアイデアをお持ちの方は書き込みお願いします。
ブランチ
- ブランチは https://trac.openpne.jp/svn/OpenPNE/branches/prj/pne-api
- 現在2.8.2ベースで以下5つのAPIを開発済みでコミットしています。2.10にも追加していく予定です。
・認証API ・日記取得API ・コメント書き込みAPI ・あしあと取得API ・あしあと書き込みAPI
- インタフェースについては以下を参照してください。
XML_RPC方式 API 開発方針
- APIプログラム配置ディレクトリ
- webapp\modules\api\lib\xmlrpc\
- PHPファイル名
prefix_数字(3桁)_動作概要.php 例: コミュニティを作成する場合 com_001_create_community.php 数字は通し番号で管理する(管理方法は要検討)
- prefix
- 動作に関連するprefixを選択する
au - 認証 as - あしあと ba - バナー bo - ブックマーク com - コミュニティ di - 日記 fr - フレンド im - 画像 mem - メンバ mes - メッセージ po - ポイント ra - ランキング re - レビュー sce - スケジュール
- 動作に関連するprefixを選択する
- API追加手順
(1)webapp\modules\api\lib\xmlrpc\ に prefix_数字(3桁)_動作概要.php を作成する (2)DBのテーブル c_api に以下のデータをinsertする c_api_id:数字(シーケンシャル) name:APIの名前 ip:呼び出し元のIPアドレス *APIは許可されたIPアドレスからしかアクセスできない *http://ホスト/?m=admin&a=page_list_c_api からも設定可能
- API の内部処理
(1)パラメータのvalidateチェック (2)パラメータに従いデータをDBから検索・更新 (2-1)対応するSQLメソッドが webapp/lib/db 以下のファイルに 存在する可能性が高いので調べてみる (2-2)存在すればSQLメソッド名に、以下のように対応したopメソッドを webapp\lib\OP.php に定義する db_ashiato_c_ashiato_list4c_member_id ↓ op_ashiato_c_ashiato_list4c_member_id 定義したopメソッドのインタフェースはdbと同様とし、内部的にはdbメソッドを呼び出す作りとする。 イメージ ------------------------- function op_ashiato_c_ashiato_list4c_member_id($c_member_id_to, $count) { return db_ashiato_c_ashiato_list4c_member_id($c_member_id_to, $count); } ------------------------- *OP.php内では OPクラスを定義し、全メソッドをstaticメソッドとして定義する *この点はwebapp/lib/db 以下のファイルと異なる (2-3)webapp/lib/db に存在しなければ、新規にopメソッドを追加し、内部でSQLを定義する。 (2-4)(2-2,3)で追加したメソッドをAPI内部から呼ぶ (3)検索・更新したデータをレスポンスとして返却 *op.phpへコピーする理由 webapp/lib/db 以下のメソッドは仕様変更が発生する可能性がある。 これとは別に仕様を固定したメソッドを作成し、 ブラウザ、API双方から呼び出せるような仕組みを取り入れたい。 これに対応するため webapp\lib\op\op.php を追加する。 まずは、APIで使用するメソッドを随時 op.php に再定義することでメソッドの数を増やしていく。
APIの整備・新設
- カスタマイズ開発や、拡張モジュールの開発を支援するため、長期間サポートする関数群を新設する
- OpenPNEバージョンのX.Y.Zにたいして同一のX(OpenPNE2.Y.Zだったら2)の間仕様を保持する。仕様が減らない、増えることはある。
- 外部API(XMLRPC REST)と内部モジュール(PHP関数呼び出し)共通して本API関数群を利用できる
op_関数の新設
フェイスブックAPIを参考にしよう FBML fb:if(xxxx)
※確定
※検討中 関数案
- op_c_member4c_member_id(c_member_id)【メンバーオブジェクト取得】
- op_c_member4cookie() or op_c_member4cookie()【クッキーセッションからメンバーオブジェクトを取得】
プロジェクトチケット component=pne-api&resolution=|
未完了のプロジェクトチケット