web-dev-qa-db-ja.com

RESTを行う適切な方法は何ですか?

今日では誰もが [〜#〜] soa [〜#〜] をしていますが、実際に何が何であるかを実際に理解していない人もいます。だから彼らはそれを間違っています。これを類推として使用すると、 [〜#〜] rest [〜#〜] が何であるかがわかっており(または、少なくともそうだと思います)、その一部を実行したいと考えています。 しかし、私はそれを正しく行いたいと思っています。

だから私の質問はRESTを行うための適切な方法は何ですか?

36
JohnDoDo

まあ、RESTful Webアプリケーションを構築する方法を学ぶ方法はたくさんありますが、ユニークな正しい方法はありません。 RESTfulは標準ではありませんが、一連の標準(HTTP、URI、MIMEタイプなど)を使用します。

これから始めます: RESTを妻に説明した方法

次に、これを続行します。 RESTful Webサービスクックブック

そして、学習する最善の方法は実験を行うことであり、間違いから多くを学ぶことができるため、Webアプリケーションの開発に全力を尽くします;)

最初のWebアプリが完全にRESTfulでなくても心配しないでください。それを行う方法が見つかります!

それで、オビ=ワン・ケノービを引用して、「力があなたと共にいてくれますように!」 ;)

[〜#〜]編集[〜#〜]

では、具体的に説明しましょう。 RESTful Webアプリケーションを作成したいと思いませんか?さて、先ほど述べたように、さまざまな方法がありますが、これが主要なガイドラインです。

定義

REST(Representational State Transfer)は、分散システム(WWWなど)向けのソフトウェアアーキテクチャのスタイルです。これは標準ではありませんが、HTTP、AJAX、HTML、URI、MIMEタイプなどの一連の標準を使用しています。ここでは、リソース自体ではなく、リソースの表現について説明しています。 「RESTを妻に説明した方法」からの引用:

WifeWebページはリソースですか?

Ryan親切。 Webページは、リソースの表現です。リソースは単なる概念です。

アーキテクチャの制約

  • Client-Server:クライアントとサーバーはUniform Interface(以下で説明)によって分離されています。
  • Stateless:サーバーとクライアントの通信は、サーバーに特定のクライアントの状態を保存せずに行われます。
  • Cachable:クライアントは、すでに行われた要求の応答のキャッシュを持っている可能性があります。
  • レイヤードシステム:クライアントは、エンドサーバーに直接接続されているのか、中間サーバーを介して通信が行われているのかを知りません。

均一なインターフェース

  • リソースの識別:各リソースはURIで識別される必要があります。
  • プロトコル:通信クライアントとサーバーに入るには、前にプロトコルを実行する必要があります。各リクエストには、適切なMIMEタイプ(application/xml、text/html、application/rdf + xmlなど)、適切なヘッダー、適切なHTTPメソッド(以下のCRUDの説明を参照)が含まれる場合があります。

CRUD

OK、URIを使用できるリソースを特定するのを見ましたが、アクション(追加、変更、削除など)には別のものが必要です。CRUD(作成、読み取り、更新、削除)へようこそ。

  • Create{HTTP:POST} {SQL:INSERT} =>新しいリソースを作成する
  • 読み取り{HTTP:GET} {SQL:SELECT} =>リソースを取得
  • Update{HTTP:PUT} {SQL:UPDATE} =>リソースを変更
  • 削除{HTTP:DELETE} {SQL:DELETE} =>リソースを削除

ここで、PUTとDELETEに関して、いくつかの技術的な問題が発生する可能性があります(HTMLフォームで取得します)。多くの場合、開発者は各 'PUT'および 'DELETE'リクエストに対してPOSTを使用してこの問題を回避します。正式には、PUTとDELETEを使用する必要があります。ちなみに、好きなことをしてください。私の経験から、毎回POSTとGETを使用する必要があります。

--- 次の部分を使用する必要がありますが、それはRESTの結合ではありません:リンクされたデータに関係します ---

URI

技術的な詳細から抽象URI!次のようにURIに別れを告げます。

http://www.example.com/index.php?query=search&id=9823&date=08272012

URIを再設計してください!上記のリンクを取り、次のように変更します。

http://www.example.com/search/2012/08/27/9823

それはずっといいですよね?それは次の方法で行うことができます:

別のこと:異なるURIを使用して異なるリソースを表す:

注意してください:about.htmlとabout.rdfはファイルではありません! XSLT変換の結果である可能性があります。

コンテンツ交渉

この時点に達した場合、おめでとうございます!おそらく、セマンティックWebの技術的な詳細を入力しているので、より抽象的な概念を取得する準備ができていると思います。

GET http://www.example.com/about
Accept: application/rdf+xml

ただし、URIが異なるため、サーバーはabout.rdfで応答しません( http://www.example.com/about.rdf )。それでは、303パターンを見てみましょう!サーバーはこれを返します:

303 See Other
Location: http://www.example.com/about.rdf

そして、クライアントは次のように返されたリンクをたどります。

GET http://www.example.com/about.rdf
Accept: application/rdf+xml

最後に、サーバーは要求されたリソースを返します。

200 OK
about.rdf

心配しないでください。クライアントアプリケーションはこれを実行しません。 303パターンはサーバーアプリケーションで実行する必要があり、ブラウザが残りを実行します;)

結論

多くの場合、理論は実践から遠く離れています。これで、RESTfulアプリケーションの設計と開発の方法は理解できましたが、上記のガイドラインはヒントにすぎません。あなたはあなたがウェブアプリケーションを構築する最善の方法を見つけるでしょう、そしてそれはおそらくそれが理論が望むものと同じではないでしょう。気にしないでください:D!

参考文献

RESTful Webサービス、Sameer Tyagi

REST APIはハイパーテキスト駆動である必要があります、ロイトーマスフィールディング

RESTful Webサービス:基本、Alex Rodriguez

Webber RESTワークフロー

30
Wilk

a REST聖書の本か何か...

聖書の本は必要ありません。私はまったく同じ質問をし、RESTについて必要な、または知りたいと思ったすべてを、これら3つの記事を読むことで学びました:

  1. HTTPとRESTの初心者向けイントロダクション Net Tuts +から
  2. RESTful Webサービス:基本 IBM developerWorksから
  3. 実際にはRESTful HTTP InfoQから

しかし、私はそれを正しく行いたいと思っています。

上記の記事で読むように、重要なのは、アプリケーションのアクセス可能な部分を、既存のHTTP「動詞」を使用して作成、取得、更新、または削除できる「リソース」と考えることです。GET、PUT、POST 、DELETE。

また、PUTとPOSTの違いを知っている 、およびそれらをいつ使用するか。 GET、PUT、およびDELETEはべき等トランザクションである必要があります。POSTはすべきではありません。

また、クライアントへの通信時に HTTPステータスコード を適切に使用します。

5
CFL_Jeff