RESTful PHP-5つの簡単なヒント

REST(Representational State Transfer)は、リソース操作とHTTP仕様に基づくWebアプリケーションとサービスのアーキテクチャスタイルまたは一連の規則です。 HTTP(Hypertext Transfer Protocol)の創設者の1人であるRoy Fieldingが初めてこのことについて話しました。

多くの場合、WebアプリケーションはHTTP仕様を無視して、GETおよびPOST、200 OK、および404 NOT FOUNDというお気に入りの機能を使用して前進します。 プログラム可能なWebアプリケーションは独自のAPIで使用されるため、HTTP仕様を無視する決定は将来問題を引き起こす可能性があります。 その結果、GETおよびPOSTインターフェースを備えた多くのアプリケーションがあります。 たとえば、ユーザー削除インターフェイス:GET / user / 1 / delete against POST / user / delete {id = 1}; RESTの場合、リソースとして/ user / 1を指定し、HTTP DELETEメソッドを削除できます。

POST、GET、PUT、DELETEなどの重要なHTTPメソッドは、多くの場合、CREATE、READ、UPDATE、DELETE(CRUD)データベース操作操作と比較されます。 HTTPは、WebサーバーとWebブラウザーの概念を分離します。 これにより、「クライアント/サーバー」の原則に基づいて、各実装が他の同様の実装と異なるようになります。

今が例を見る時ですので、より明確になります。

1. PUTおよびDELETEメソッドの使用


PHPでは、使用されているHTTPメソッドを簡単に判断できます;システム変数$_SERVER['REQUEST_METHOD'];見るだけです$_SERVER['REQUEST_METHOD']; Webブラウザーの場合、GETまたはPOSTメソッドのいずれかがそこに登録されます。 RESTクライアントアプリケーションでは、PUT、DELETE、できればOPTIONSなどのサポートが必要です。 しかし、残念ながらPHPには、$ _GETや$ _POSTとは異なり、$ _PUTや$ _DELETEはありません。 省略を修正する方法は次のとおりです。

 $_PUT = array(); if($_SERVER['REQUEST_METHOD'] == 'PUT') {   $putdata = file_get_contents('php://input');   $exploded = explode('&', $putdata);    foreach($exploded as $pair) {     $item = explode('=', $pair);     if(count($item) == 2) {       $_PUT[urldecode($item[0])] = urldecode($item[1]);     }   } } 


したがって、スーパーグローバリズムを除いて、$ _POSTに似た$ _PUTの配列があります。

2.カスタムHTTP 1.1ヘッダーの送信


PHPでは、クライアントに送信されるヘッダーをカスタマイズできます。 次に、ヘッダーにはサーバーからの応答コードが含まれます。 デフォルトでは、PHPは、成功したリクエストに対して200 OKコードで応答し、die()関数を使用するか、新しいリソースを作成します。 実際には、状況をカスタマイズするには2つの方法があります。

 header('HTTP/1.1 404 Not Found'); //  header('Location: http://www.foo.com/bar', true, 201); // 201 CREATED 


最初のオプションは、応答コードを設定するためのかなり標準的な方法です。 「201 Created」または「301 Moved Permanently」リソースへのリダイレクトを指定する必要がある場合は、例に示すように、header()関数の3番目のパラメーターにコードを指定することで簡単に実装できます。 2番目の例は、より読みやすいコードに置き換えることができます。

 header('HTTP/1.1 201 Created'); header('Location: http://www.foo.com/bar'); 


3.意味のあるHTTPヘッダーを送信する


ポイントは、仕様で指定されたヘッダーを使用することです。ヘッダーは完全に自給自足ですが、多くの場合、よりステレオタイプのソリューションによって無視またはエミュレートされます。

201 Created-新しいリソースが作成された場合に使用されます。 / tech / newsなど、リソースへの紹介機能とともに使用する必要があります。 彼は自動誘導を使用しません。

202 Accepted- 「お客様の注文は受け入れられ、まもなく処理されます」とお客様に伝えるかのように。 リソースが作成された後に送信されるコード201とは異なり、コード202は要求をキューに入れます。

204コンテンツなし -キャッシングおよび条件付きGETリクエスト(If-Modified-Since / If-None-Matchヘッダーを含むリクエスト)と組み合わせて、Webアプリケーションが再処理および送信せずに「コンテンツは変更されず、キャッシュバージョンを使用し続ける」と言うことができますキャッシュ。

401 Unauthorized-特定のアクセスレベルを必要とするリソースにアクセスするときに使用する必要があります。 www-authenticationと組み合わせて使用​​します。

500内部サーバーエラー -PHPスクリプトがブリージングしなくなった場合、または例外をスローした場合、200を超えるOK

当然、もっと多くの見出しがあります;トピックは繰り返し書かれています;上記は単なる例です。

4. $ _SESSIONは使用しないでください


真のRESTful PHPアプリケーションは完全に独立している必要があります。すべての要求には、サーバーからの追加の努力なしにそれらに応答できる十分な情報が含まれている必要があります。 実際には、これには、日付(タイムスタンプ)とチェックサムとともにCookieに認証情報を保存することが含まれます。 追加情報もCookieに保存できます。 大量のデータを保存したい場合は、それらをデータベースに入れることができます。認証情報はクッキーに残しておく必要があります。 UPD:Cookieの使用はRESTイデオロギーに完全に準拠していないことに注意してください。 セッション接続が保存されます。 ただし、Cookieの場合、セッションに関する情報はクライアントに保存され、セッションを使用する場合、セッション通信はサーバーの一時ディレクトリとクライアントのセッションCookieに保存されます(「session.use_cookies」が有効な場合)。

5. cURLまたはrest-clientを使用したテスト


cURLを使用すると、目的のリソースのHTTPメソッドを簡単に実行できます。 リクエストのヘッダーとヘッダーのパラメーターを渡すことができ、レスポンスのヘッダーとデータを確認できます。 curlコマンドラインツールは、ほとんどの* nixシステムで標準です。 Windowsユーザーの場合、 MinGW / MSYSが適しています。

使用例と基本オプション:

# curl -X PUT www.foo.com/bar/1 -d "some=var" -d "other=var2" -H "Accept: text/json" -I

-X [METHOD]はHTTPメソッドを定義します。
-d "name = value"は、変数の名前と値をPOST / PUTに設定します。
-H [HEADER]はヘッダーを設定します。
-I応答ヘッダーを表示します。

また、RESTをテストするためのレストクライアントであるJava / Swingに基づく無料のグラフィックもあります 。 JSON / XMLもサポートしています。

関連リンク


英語のオリジナル記事
Web開発→RESTアーキテクチャ
英語で役立つREST記事
RESTful PHPフレームワーク
REST:クイックピッチ
メソッド定義

UPD:

どこかで使われている


Flickrサービス
Yahoo! Maps Webサービス
MamboのRESTful API

*安らかな(英語)-鎮静剤; なだめる。

Source: https://habr.com/ru/post/J46032/


All Articles