マスター | 開発者 |
---|---|
Fat Free Framework プラグイン: コードと外部 REST API の間の橋渡しをします。 F3-wcurl は、cURL の論理抽象化レイヤーとして機能し、認証と成功応答のキャッシュを処理します。
F3 組み込みWeb
プラグインは優れており、個々の HTTP リクエストを簡単に処理できます。 F3-wcurl は、コード内にリモート API 全体の実装を構築します。
時間が経つにつれ、cURL リクエスト、設定、オブジェクト、応答などを処理するという、重要ではあるものの繰り返しのタスクを伴うツールやスクリプトを迅速に構築する必要が生じてきました。結局、同じ関数をコピーし、変更し続けました。そして、何かが機能しない理由を数か月前に書いた同じ問題のデバッグ。
cURL オプションを適切に制御したりアクセスしたりできますが、F3-wcurl はそれを強制しません。これにより、リクエスト自体に焦点を当て、何が変更され、何が返されるのかに注目できます。 F3 エコシステムのプラグインとして、当然のことながら、 Prefab
、 Cache
、 Web
(cURL リクエスト自体に対するものではありません) という優れた依存関係がほとんどありません。
F3 クラスは、関連する設定の連想配列から構築されます。配列はコードから直接渡すことも、INI ファイル (F3-wcurl をビルドする前に F3 にインポートされる) から渡して F3 ハイブに保存することもできます。
F3-wcurl は F3 のプレハブとキャッシュを使用するため、コードのどこからでも同じ wcurl オブジェクトを呼び出すことができ、応答が迅速になります。
デフォルトでは、F3-wcurl は F3 ハイブ内のwcurl
キーを検索しますが、INI は複数の異なる REST API 実装の設定を便利に保持できます。
$ wcurl = wcurl:: instance ([ $ iniName = ' wcurl ' | $ optionsArray ]);
この非常に単純な配列構造は、wcurl の内部動作を定義します。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
根 | 弦 | ヌル | リモート API ルート。リクエスト URI の構築に使用されます。 |
cb_ログイン | 弦 | ヌル | 認証を実行できるコールバック関数をコードから設定します。これはcall_user_func() の有効なコールバックである必要があります。 |
ttl | 整数 | 60 | 秒、GET 応答をキャッシュする時間 |
ヘッダー | 配列 | [ ] | cURL の有効な文字列配列 ["Header: value", "Another-Header: Value"] |
ユーザーエージェント | 弦 | F3-wcurl バージョン | ユーザーエージェント文字列 |
基本認証 | 弦 | ヌル | Basic Auth ヘッダーを送信します。 username:password の形式で使用します。 |
クエリトークン | 弦 | ヌル | 各リクエストに URL トークンを追加します |
エンコードJSON | ブール値 | 真実 | Weather は POST 本文を JSON としてシリアル化し、 false に設定すると本文を通常の HTML フォームとして送信します |
カールプト | 配列 | [ ] | RAW cURL 設定 RAW cURL 設定の完全な制御用の配列。key key => val を使用します。key は定数またはその文字列名のいずれかです。 |
休みます | 配列 | [ ] | URL 構築ヘルパーのkey => val テーブル (「例」セクションを参照) |
上の表のオプションを設定するには、 key => val
配列に 1 つ以上のオプションを渡します。
$ wcurl -> setOptions (
[
' useragent ' = > ' F3-wcurl API integration ' ,
' encodeJSON ' = > false ,
' ttl ' = > 300 ,
// etc
]
);
渡したオプションのみが更新され、その他はすべて以前のデフォルトの状態のままになります。
1 つ以上のオプションをクリアするには、デフォルトにリセットするキーの名前または配列リストを渡します。
$ wcurl -> clearOptions ([ ' useragent ' , ' ttl ' /*, ... etc */ ]);
wcurl クラスの現在の状態を表すオプションの完全な配列を取得するには、次のようにします。
$ wcurl -> clearOptions ();
返された多次元配列は、抽出されたクラスとまったく同じクラスを作成できる互換性がある必要があります。
クラスが作成されてから実行されたリクエストの数、受信した http レスポンスの数とキャッシュから提供されたリクエストの数の統計を返します。
$ wcurl -> getStats ();
現在サポートされている関数は、GET、POST、PUT、PATCH、および DELETE です。ただし、実装する必要がある場合はさらに追加する予定です。
$ response = $ wcurl -> get ( string $ url [, array $ fill = null [, array $ options = null ]] );
私はこのような議論を覚えています。
UFO:
$ response = $ wcurl ->post( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL、塗りつぶし、本文、オプション
$ response = $ wcurl ->put( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL、塗りつぶし、本文、オプション
$ response = $ wcurl ->patch( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL、塗りつぶし、本文、オプション
$ response = $ wcurl ->delete( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL、塗りつぶし、本文、オプション
休符テーブルは 2 つの同様に重要な目的を果たします。
長いリモート URL パスを構築する場合、特に複数の場所から呼び出される場合は、短いキーワードで覚えておく方が簡単です。 /lists/members/all/pages
の代わりにallmembers
ようにします。これらには、リクエストごとに入力する必要がある固有のパラメータも含まれる場合があります。このコンセプトは、このプラグインが存在する主な理由の 1 つです。
読み続けてください。
最良の方法は、リモート パスを.ini
構成に保存することです。 fill の URL 変数は両側から 2 つの%
で囲まれます。
TODO: このラップ文字を構成可能にします。
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
または、単純なkey => value
配列をその場で渡します - 以前の設定とマージされます
$ wcurl -> setOptions (
' rests ' => [
' allmembers ' => ' /lists/members/all/pages ' ,
' withVariable ' => ' /lists/members/%%memberID%%/pages ' ,
' updateEmail ' => ' /lists/members/%%memberID%%/update '
]
);
名前付きルートを使用するには、フルパスの代わりにその名前を渡します
$ response = $ wcurl -> get ( ' allmembers ' );
これは/lists/members/all/pages
に解決されます
$ response = $ wcurl -> get ( ' withVariable ' , array ( ' memberID ' => ' abc123ID ' ) );
これは/lists/members/abc123ID/pages
に解決されます。
または、POST リクエストでは、次のUFBOパラメータを渡す必要があることがわかっています。
$ wcurl -> post ( ' updateEmail ' , // path shorthand to resolve name
[ ' memberID ' => ' abc123ID ' ], // fill this in the path
[ ' email ' => ' [email protected] ' ] // body to send
);
すべての設定をメインのini
ファイルに含めると、最初に必要な使用時にのみクラスを初期化できます。つまり、コードが get() を送信することを決定したときです。この時点でクラスが Prefab に登録されていない場合は、必要に応じて INI 設定からクラスが構築されます。
オプションの完全なリストについては、数スクロール上にあるオプション配列表を参照してください。
[wcurl]
root =http://mysite.api/v1
ttl =3600
cb_login =yourClass::cb_do_login
useragent = Zeus was here
headers = " Header: value " , " Another-Header: Value "
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
; Using with multiple API's
[apitwo]
root =http://yoursite.io/v2
ttl =60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers =/lists/members/all/pages
getOneUser =/lists/members/%%memberID%%/pages
$ wcurl -> setLogin ( callback ' yourClass::cb_do_login ' );
いずれかのリクエストの結果が HTTP 401 または 403 コードになる場合、 wcurl
ログイン コールバック関数を呼び出して、元のリクエストを繰り返します。再度エラーが発生した場合は、元の関数の結果に戻ります。 wcurl
API ルートに固有の一時ファイルに Cookie を保存します。この Cookie ファイルはすべてのリクエストに含まれます。
ログインが成功した場合、コールバックは true を返す必要があります。そうでない場合、認証成功後の自動繰り返しリクエストは失敗します。
注意!ログインが機能しないにもかかわらずreturn true
場合、 request->login->request->login...
不定ループが発生する可能性があります。
ログイン機能例
static function cb_do_login (){
$ wcurl = wcurl:: instance ();
$ login = $ wcurl -> post ( " /login " , array (
' login ' => ' my_user ' ,
' password ' => ' covfefe ' )
);
if ( $ login [ ' status ' ][ ' http_code ' ]== 200 ){
return true ;
}
// or
$ wcurl -> setOptions ( [ ' basicauth ' => " $ user : $ password " ]);
}
wcurl::instance()
を呼び出すと、シングルトン クラスのように返されるため、コード内のどの場所でも同じオブジェクトが使用されます。クラスから新しいインスタンスを強制するには、次のようなものを使用します
$ apiTwo = new wcurl ([ $ iniName | $ optionsArray ]);
そして$apiTwo
F3 ハイブに保存できます。
改善すべき点はたくさんありますが、現時点では必要な機能を作成する予定です。あなたのユースケースで不可能なことがあれば、問題を送信するか、PR を送信してください。この素晴らしいフレームワークを提供してくれた F3 開発者に感謝します。 F3-wcurl のようなものを探しているが、それを使用していない場合は、よく考えてください。なぜまだ F3 を使用していないのでしょうか。