プロゞェクトのRESTful APIの重芁な偎面

この蚘事は私の頭の䞭で長い間醞造されおきたしたが、たったく異なる圢匏です。

WEBサヌビス http://habrahabr.ru/blogs/development/108973/など のトピックに関する最埌のいく぀かの厄介な蚘事を読み、それらでRESTテクノロゞヌを䜿甚したので、怠を捚お、時間を割り圓お、「 「私の頭の蚘事で再フォヌマット。

それで、簡朔に、あなたが蚘事で芋぀けるものずそれが誰に圹立぀か



-プロゞェクトのWEBサヌビスを䜜成するこずに興味がある、たたは蚈画しおいる初心者向け

- プロが自分で䜕か新しいものを芋぀ける可胜性は䜎い

-䞀般的なRESTむデオロギヌ

-WEBサヌビスでのCRUDの適甚

-ルヌタヌを構築するためのKISSの原則

-ベストプラクティス

-少しPR;

-参考文献、文献



刀断を始める堎所ずしお、たず蚘事を読んでから、もう少しグヌグルでお茶、コヌヒヌ、䞋線を甚意し、棚に思いを入れお、ちょっずおしっこを䜜り始めるこずをお勧めしたす。



䞀般的なアむデア



REST *1ずは䜕ですか

RESTは「Representational State Transfer」、぀たり、クラむアントにずっお䟿利な圢匏でのデヌタの提瀺です。クラむアントずは、クラむアント<->サヌバヌモデルのクラむアント゜フトりェアを意味したす。

たた、HTTPプロトコルずRESTの原則を䜿甚しお䜜成されたWebサヌビスは、RESTful Webサヌビスず呌ばれたす。

未経隓者には、すぐに質問があるかもしれたせん。なぜそのようなサヌビスが必芁なのでしょうか RESTおよびOAuthテクノロゞヌに基づく簡単な䟋を挙げたしょう。GmailアカりントずDropboxアカりントを持っおいたす。 Dropboxは招埅された友人ごずに䜙分なスペヌスを提䟛したすが、手玙を手動で曞いおGmailアドレス垳のすべおのアドレスを゜ヌトするのは退屈なだけでなく、長いこずです。 Dropboxには、「来お、仲間、連絡先を自分でむンポヌトしお、招埅状を送信する」ずいう機胜がありたす。 メヌルボックスからドロップボックスにパスワヌドを枡したくないずいう人はいないこずは明らかです。 これは、RESTful Webサヌビスの「魔法」が䜜甚する堎所です。 APIを䜿甚しお倚くの人が蚀っおいるように、「api」ではなく、dropboxはGoogle Webサヌビスにリク゚ストを送信し、Google認蚌ペヌゞに「送信」するため、Googleフォヌムにパスワヌドを入力したす、Googleはナヌザヌを認蚌し、認蚌プロセス認蚌の成功に぀いおDropboxに通知access_tokenを提䟛したす。 最終的に、䞀意のトヌクンaccess_tokenを持ち、それをAPIの各リク゚ストに添付するこずで、Dropboxはパスワヌドに぀いお䜕も知らなくおも個人デヌタを操䜜できたす。

アヌキテクチャはもずもず正確にHTTPを䜿甚しお開発されたしたが、RESTは必ずしもHTTPプロトコルの䜿甚ではないこずを芚えおおくこずが重芁です。 RESTは、デヌタの転送に任意のアプリケヌション局プロトコルを䜿甚できたす。



CRUD



RESTful Webサヌビスを開発する堎合、CRUD *方法論2を芚えおおくこずが重芁です。これは、解読された翻蚳では、create-read-modify-deletecreate-read-update-deleteを意味したす。

Webサヌビスの開発はHTTPプロトコルを䜿甚しお実行されるため、そのバンを䜿甚する必芁がありたす。぀たり、プロトコルメ゜ッドを䜿甚しお、リ゜ヌスに察するアクションを決定したす。 RESTの䞖界では、䞀般的に次の暙準が受け入れられおいたす。

POST-䜜成

GET-読み取り読み取り、受信

PUT-曎新倉曎、曎新、たたは䜜成。存圚しない堎合は、このバヌゞョンでも䜿甚されるこずがありたす

DELETE-削陀削陀

PUTずDELETEはメ゜ッドの実装が困難であり、ブラりザの機胜により、これらのメ゜ッドはクラむアントブラりザヌ偎でAJAXを䜿甚しお「人間的に」実装できるこずに泚意する必芁がありたす。さらに、すべおのブラりザヌで動䜜するこずは䞍可胜ず思われたす。 したがっお、POSTメ゜ッドの「オヌバヌロヌド」を通じおこれらのメ゜ッドを䜿甚するのが慣䟋です。 蚀い換えれば、POSTメ゜ッドを䜿甚しお、オヌバヌロヌドするメ゜ッドの名前を含む、ある皮の予玄枈み倉数http_methodなどを送信しおいたす。 POST + http_method = put-サヌバヌ偎に、クラむアントがリ゜ヌスを介しおPUTを芁求したこずを明確にしたす。



ルヌタヌを構築するずきのキスの原則



そもそも、KISSを解読したす-ただ理解しおいない人のために、小さくおシンプルに保぀-シンプルで小さなものに固執し、蚀い換えれば、誰もがアクセス可胜で理解しやすく、芚えやすいようにしたす。

Webサヌバヌからデヌタを受信するには、クラむアントは連絡する必芁があるURLを知る必芁がありたす。 これらの同じナニバヌサルリ゜ヌスポむンタヌを「構築」する原則に぀いお説明したす。

たず、サヌビスに合った基本的なルヌルセットを決定したす。 たずえば、圓瀟のoDesk瀟では、ベヌスが/ apiであるURIはRESTful APIリ゜ヌスであるこずを瀺したした。 必芁に応じお、別のサブドメむンに配眮できたす。ここでは、1぀のドメむンの「内郚」のク゚リであっおも、クロスブラりザク゚リやその他の萜ずし穎を芚えおおく䟡倀がありたす。

次のポむントは、リ゜ヌスルヌタヌデヌタにアクセスできるアドレスを䜜成するこずです。 䜏所を線集する際に適切な方法ず芋なされるいく぀かの点に泚意しおください。

-慣甚的なグルヌプぞの分類mc-メッセヌゞセンタヌリ゜ヌス、チヌム-コマンドリ゜ヌスなど

䟋/ api / mc / ...

-バヌゞョン管理

䟋/ api / mc / v1 / ...

-アクセスが蚱可されるリ゜ヌスの明確な名前

䟋/ api / mc / v1 / prefs / ...-メッセヌゞセンタヌの蚭定ぞのアクセス

-URLの䞋に氞続デヌタを入力する

䟋/ api / mc / v1 / prefs / mydevelopersuid

-応答圢匏の定矩ルヌタヌURLの名前、たたは「システム」倉数のいずれか

䟋/api/mc/v1/prefs/mydevelopersuid.json-oDeskは、JSON圢匏の応答、XML圢匏の.xmlなどが必芁な堎合に接尟蟞「.json」を䜿甚したす。 / mc / v1 / prefs / mydevelopersuidtqx = outjson-これはGoogleがGDSで行うこずです。 / api / json / mc / v1 / prefs / mydevelopersuidは別の可胜なオプションであり、圢匏はルヌタヌの䞀郚です。



ベストプラクティス



ここで倚くのこずを話すこずができ、長い間、私は䞻なポむントをリストしたす

-垞にjson圢匏で応答を受信する機胜を提䟛したす。 そのため、AJAXアプリケヌションの䞖界では、JSON *3がクラむアント郚分ずサヌバヌ郚分の間でデヌタを転送するための事実䞊の「暙準」になっおいたす。

-承認のために怜蚌枈みの実瞟のあるスキヌムを䜿甚する

md5デヌタ眲名などを䜿甚しおスクヌタヌを再発明しないでください。デヌタ保護の専門家を信頌しおください。 OAuthはさたざたな蚀語のラむブラリでいっぱいであるため、あなたのために発明されたした-この力を䜿甚しおください。 OAuthが必芁ない堎合は、Flickrで実装されおいるAPIKeysを詊しおください。 いく぀かのオプションがありたす-OpenIDずその他、私は皆を考慮したせん-私は本質を知らせたした。

-httpsが必芁な堎所を忘れないでください

蚌明曞がIPのドキュメントに自己蚘述されおいる堎合は、それを必ず蚘茉するこずを忘れないでください。 近隣のワヌクショップの同僚の時間を高く評䟡し、蚌明曞の有効性のチェックがあるからずいっお、アプリケヌションのバグを探しないようにしたす。

-答えに䞍明瞭なものを決しお「投げ出さない」Webサヌバヌの゚ラヌ、臎呜的、デヌタベヌスずの接続の問題など。 これらはすべお、RESTful Webサヌバヌによっお凊理され、芁求された圢匏で明確な回答を提䟛する必芁がありたす。 ぀たり、クラむアントぞの応答時に明確な゚ラヌを提䟛したす。 応答圢匏ずヘッダヌは別のトピックです。 RFC 2616 *4に埓っお正しいHTTPステヌタスを返すこずをお勧めしたす。ステヌタスによりメッセヌゞ本文を送信できる堎合は、本文に短いメッセヌゞがありたす。 䞀郚の人々は、垞に本文にステヌタス「200 OK」を䞎えるこずを奜むため、クラむアントは垞にメッセヌゞを解析し、本文に゚ラヌメッセヌゞ/タグが存圚するかどうかを確認する必芁がありたす。 明確な慣行や䞀般的な意芋はただありたせん

-APIにドキュメントを曞く。そうでなければ、ちょっず、おしっこ、それは圹に立たない:)

-そしお最埌に、最初にRESTful Webサヌビスの内郚アヌキテクチャを考え盎したす。ロゞックは芁求された圢匏ず同じである必芁があり、デヌタ倉換は各圢匏ごずに個別に実行する必芁がありたす。 これにより、ルヌタヌを簡単か぀迅速に拡匵し、必芁に応じお、デヌタを衚瀺するための新しい暙準を远加できたす。



PR



oDeskのRESTful APIのメむン開発者でありAPI-developers.odesk.comはPRで、健康のために䜿甚しおください:)、RESTサヌビスを長い間行っおいるので、この分野の基本的な知識を共有するこずが適切だったず思いたす。 私を信じるか信じないかはあなたの個人的な暩利ですが、それでも私は、少なくずも少し読んでも自分自身のために利益を芋぀けお、少なくずもあなたの知識をリフレッシュしおくれるこずを願っおいたす;



RESTアヌキテクチャにはただ倚くの疑問が残されおおり、倚くの堎合ホリバヌに぀ながりたす。私の意芋があなたの意芋ず䞀臎しない堎合でも私を責めないでください。



PSこの蚘事は基本的な偎面のみを扱っおおり、 Webサヌビスを䜜成するための詳现な指瀺、本などを提䟛するこずを意図しおいたせん。



リンク*



1 http://en.wikipedia.org/wiki/Representational_State_Transfer

2 http://en.wikipedia.org/wiki/Create,_read,_update_and_delete

3 http://en.wikipedia.org/wiki/JSON

4 http://www.w3.org/Protocols/rfc2616/rfc2616.html

参照RESTful Web ServicesLeonard Richardson、Sam Ruby、O'Reilly Media、Inc.

Yahoo RESTグルヌプ http : //tech.groups.yahoo.com/group/rest-discuss/



All Articles