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


36

誰もが実際に何が何であるかを実際に理解していない場合でも、誰もがSOAを実行しています。だから彼らは間違っています。それを類推として使用して、RESTが何であるか(または少なくとも私はそう思う)を知っており、その一部を実行したいと考えています。しかし、私はそれを正しくしたい。

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


1
Stack Overflowの「rest」タグwikiは、Stack Exchangeネットワークのコンテキストで正規のリソースに近づくのと同じようです
-gnat

17
しばらく目を閉じて...自転車に乗って横になりました。
エドワードストレンジ

RESTは基本的に、mydomain.com / accountsなどのURLとHTTP動詞を使用して操作を呼び出すだけではありませんか?動詞は、データを取得、作成、更新、または削除するかどうかを示していますか?RESTを考えるとき、それは私が考えるものです。
マフィンマン

2
@Nick、これは最も一般的な解釈です。「本物」は理解するのがはるかに難しく、(私が知る限り)実際に実装されている場所を見つけるのははるかに困難です...(ウィルクの答えを参照)
Benjol

3
@Nickの理解はRESTではなく、RPC over HTTPです。

回答:


30

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

これから始めましょう: これからましょうどのようにRESTを妻に説明したか

次に、これを続行します。 RESTful Web Services Cookbook

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

最初のWebアプリが完全にRESTfulでなくても心配する必要はありません。それを行う方法が見つかります。

それで、オビ=ワン・ケノービを引用して、「力があなたと共にあるかもしれません!」;)

編集

わかりました、もっと具体的にさせてください。 RESTfulなWebアプリを作成したいですか?さて、私が言ったように、それを行うには多くの方法がありますが、これは主なガイドラインです。

定義

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

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

ライアンの種類。Webページはリソースの表現です。リソースは単なる概念です。

アーキテクチャの制約

  • クライアントサーバー:クライアントとサーバーは、Uniform Interface(後述)によって分離されます。
  • ステートレス:特定のクライアントの状態をサーバーに保存せずにサーバーとクライアントの通信が行われます。
  • Cachable:クライアントは、すでに行われたリクエストの応答のキャッシュを持っている場合があります。
  • 階層化システム:クライアントは、エンドサーバーに直接接続されているのか、中間体を介して通信が行われているのかを知りません。

均一なインターフェース

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

CRUD

OK、リソースを識別するためにURIを使用できることを確認しましたが、アクション(追加、変更、削除など)のために何か他のものが必要です。CRUD(作成、読み取り、更新、削除)への大歓迎です。

  • Create { HTTP:POST } { SQL:INSERT } =>新しいリソースを作成する
  • Read { HTTP:GET } { SQL:SELECT } =>リソースを取得
  • 更新 { 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(http://www.example.com/about.rdf)を持っているため、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アプリケーションの設計と開発の方法はわかりましたが、上記のガイドラインは単なるヒントです。Webアプリケーションを構築する最良の方法を見つけることができますが、おそらく理論とは異なります。それを気にしないでください:D!

書誌

RESTful Webサービス、Sameer Tyagi

REST APIはハイパーテキスト駆動型でなければなりません、Roy Thomas Fielding

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

Webber RESTワークフロー


1
このリンクを追加することを検討してください。これは私が出会った中で最も完全なガイドです。
ベンジョー

私はPUTとPOSTが(あなたの答えに関連して)意味が入れ替わって使用されているのを見ました:POST-> create、PUT-> update。どの意味がより広く使用されているアイデアはありますか?
アンドレスF.

@Andres F .: jcalcote.wordpress.com/2008/10/16/…言う:Create = PUT指定されたリソース(URL)の完全なコンテンツを送信している場合。サーバー側のアルゴリズムを使用して、指定されたリソースの下位を作成するコマンドをサーバーに送信する場合、作成= POST。指定されたリソースのコンテンツ全体を更新する場合、Update = PUT。指定されたリソースの1つ以上の部下を更新するようサーバーに要求している場合、更新= POST。
ウィルク

@ベンジョル:あなたの提案で編集します;)ありがとう!
ウィルク

1
@Wilk考慮すべきことがいくつかあります!おそらく誰もこの権利を取得できない理由:P
Andres F.

5

RESTバイブルブックか何か...

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

  1. Net Tuts +のHTTPおよびRESTの初心者向け入門
  2. RESTful Webサービス: IBM developerWorks の基本
  3. InfoQの実際のRESTful HTTP

しかし、私はそれを正しくしたい。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.