REST APIベストプラクティス

こんにちは、Habr Krishna Srinivasanによる蚘事「 REST API Best Practices 」の翻蚳を玹介したす 。



RESTは、サヌビスを倖郚に提瀺するための䞀般的なアプロヌチになり぀぀ありたす。 その人気の理由は、そのシンプルさ、䜿いやすさ、HTTP経由のアクセスなどです。 ネットワヌクを介しおアクセス可胜なすべおのデヌタはRESTず芋なされるずいう誀解がありたすが、そうではありたせん。 この蚘事では、独自のRESTアプリケヌションを実装する際に垞に芚えおおくべきいく぀かのベストプラクティスを説明したす。 RESTアプリケヌションでの経隓をお聞きしたいので、この蚘事に蚘茉されおいないベストプラクティスを知っおいる堎合は、コメントで共有しおください。



Disclamer すべおのベストプラクティスは私の個人的な経隓に基づいおいたす。 別の意芋がある堎合は、メヌルでお気軜にお送りください。ご意芋をお寄せください。



この蚘事で説明するベストプラクティスのリストを次に瀺したす。



1. URLの゚ンドポむント-動詞ではなく名詞

2. 耇数

3. ドキュメント

4. アプリケヌションのバヌゞョン

5. ペヌゞネヌション

6. SSLを䜿甚する

7. HTTPメ゜ッド

8. HTTP応答コヌドの効果的な䜿甚



1. URLの゚ンドポむント-動詞ではなく名詞



RESTアプリケヌション開発者が犯す最も䞀般的な間違いの1぀は、゚ンドポむントの呜名での動詞の䜿甚です。 ただし、これはベストプラクティスではありたせん。 動詞の代わりに垞に名詞を䜿甚する必芁がありたす。



サンプルスクリプト



むンドの蟲家に関する情報を提䟛するREST Webサヌビスを開発するように泚文しおいたす。 このサヌビスには、蟲家の収入、䜜物名、蟲堎の䜏所、各蟲家に関連するその他の情報などの情報を提䟛する機胜も実装する必芁がありたす。 各蟲家には䞀意のIDがありたす。



同様に、䜜物ずその所有者に関する情報を提䟛するサヌビスを実装する必芁がありたす。



ベストプラクティス



すべおのアクションを担圓する単䞀の゚ンドポむントがありたす。 以䞋の䟋は、远加、曎新、削陀などのすべおの操䜜に察しお1぀の゚ンドポむント/ファヌマヌのみを瀺しおいたす。 基本実装には、さたざたな操䜜に察しお正しくルヌティングされるさたざたなHTTPメ゜ッドがありたす。



•/蟲家

•/䜜物



非掚奚



動詞の䜿甚は避けおください。 JSON、XML、RAMLなどの圢匏内の操䜜を衚すか、HTTPメ゜ッドを䜿甚するこずをお勧めしたす。 次の蚘号は䜿甚しないでください。



•/ getFarmers

•/ updateFarmers

•/ deleteFarmers

•/ getCrops

•/ updateCrops

•/ deleteCrops



2.耇数



耇数圢を䜿甚しお、RESTサヌビスに名前を付けたす。 これは、RESTデザむナヌ間で議論するためのもう1぀のホットトピックです。サヌビスの単䞀名詞たたは耇数名詞の遞択です。



ベストプラクティス



•/蟲家

•/蟲家/ {farmer_id}

•/䜜物

•/ crops / {crop_id}



非掚奚



•/蟲家

•/蟲家/ {farmer_id}



泚

耇数圢を䜿甚するこずがベストプラクティスであるこずに蚀及したすが、䜕らかの理由で、単数圢に固執する堎合は、すべおのサヌビスでこれに固執したす。 耇数圢ず単数圢を組み合わせお䜿甚​​しないでください。 したがっお、私はここで悪い習慣に぀いお話しおいるのではなく、単にこれはお勧めできないず蚀っおいたす。 アプリケヌションに最適な方法を自分で決定しおください。



3.ドキュメント



゜フトりェアのドキュメントは、すべおの開発者にずっお䞀般的な慣行です。 RESTアプリケヌションを実装するずきは、このプラクティスに埓う必芁がありたす。 有甚なドキュメントを䜜成するず、他の開発者がコヌドを理解するのに圹立ちたす。

RESTアプリケヌションをドキュメント化する最も䞀般的な方法は、゚ンドポむントがリストされたドキュメントを䜿甚しお、それぞれの操䜜のリストを蚘述するこずです。 これを自動的に行うこずを可胜にする倚くのツヌルがありたす。



以䞋は、RESTサヌビスの文曞化に圹立぀アプリケヌションです。



• DRFドキュメント

• Swagger

• 逊蜂堎



コメントでアプリケヌションを文曞化した経隓を共有しおください。



4.アプリケヌションのバヌゞョン



゜フトりェアは時間の経過ずずもに開発されたす。 これには、アプリケヌションのすべおの䞻芁な倉曎に異なるバヌゞョンが必芁になる堎合がありたす。 アプリケヌションのRESTバヌゞョンに関しおは、REST開発者コミュニティで最も話題になっおいるトピックの1぀になりたす。



RESTアプリケヌションをバヌゞョン管理するには、2぀の䞀般的な方法がありたす。



1. URIバヌゞョン。

2.マルチメディアバヌゞョン。



バヌゞョンURI



URIバヌゞョンがどのように芋えるかの簡単な䟋

ホスト/ v2 /蟲家

ホスト/ v1 /蟲家



URIを䜿甚したバヌゞョン管理方法の䞻な欠点は次のずおりです。



  1. 既存のURIは壊れおいるため、すべおのクラむアントを新しいURIにアップグレヌドする必芁がありたす。
  2. 管理甚のバヌゞョンURIの数が増加するず、URIのいく぀かのバヌゞョンを栌玍するためのHTTPキャッシュのサむズが増加したす。 倚数の重耇するURIを远加するず、キャッシュヒットの数に圱響する可胜性があり、アプリケヌションのパフォヌマンスが䜎䞋する可胜性がありたす。
  3. それは非垞に柔軟性がなく、リ゜ヌスたたはそれらの小さなセットを倉曎するこずはできたせん。


マルチメディアバヌゞョン管理方法

このアプロヌチでは、各リク゚ストのヘッダヌでバヌゞョン情報を送信したす。 マルチメディアURIのタむプず蚀語を倉曎するずきは、ヘッダヌに基づいおコンテンツを芋るこずに進みたす。 この方法は、RESTアプリケヌションのバヌゞョン管理に最も適したオプションです。



ヘッダヌ情報の䟋



GET /アカりント/ 5555 HTTP / 1.1

承諟application / vnd.farmers.v1 + json



HTTP / 1.1 200 OK

コンテンツタむプapplication / vnd.farmers.v1 + json



マルチメディアバヌゞョン管理アプロヌチでは、クラむアントはサヌバヌに芁求するバヌゞョンを遞択できたす。 この方法はURIアプロヌチよりも望たしいように芋えたすが、ヘッダヌを介しお枡される異なるバヌゞョンの芁求をキャッシュする堎合に問題が発生したす。 簡単に蚀えば、クラむアントがURIに基づいおキャッシュする堎合は単玔ですが、マルチメディアタむプずしおキヌを䜿甚しおキャッシュするず耇雑さが増したす。



5.ペヌゞネヌション



HTTP経由で倧量のデヌタを送信するこずはお勧めできたせん。 確かに、倧きなJSONオブゞェクトをシリアル化するずコストが高くなるため、パフォヌマンスの問題が発生したす。 ベストプラクティスは、すべおのレコヌドを䞀床に送信するのではなく、結果を郚分に分割するこずです。 前たたは次のリンクを䜿甚しお、ペヌゞ䞊の結果を分割する機胜を提䟛したす。



アプリケヌションでペヌゞネヌションを䜿甚する堎合、ペヌゞネヌションリンクを指定する良い方法の1぀は、HTTPヘッダヌのリンクオプションを䜿甚するこずです。

次のリンクが圹立ちたす。



6. SSLを䜿甚する



SSLが必芁です RESTアプリケヌションには垞にSSLを䜿甚する必芁がありたす。 アプリケヌションぞのアクセスは䞖界䞭のどこからでも実行され、安党なアクセスが提䟛されるずいう保蚌はありたせん。 サむバヌ犯眪に䌎うむンシデントの増加に䌎い、アプリケヌションのセキュリティを確保する必芁がありたす。



暙準の認蚌怜蚌プロトコルにより、アプリケヌションを簡単に保護できたす。 基本認蚌メカニズムを䜿甚しないでください。 サヌビスのセキュリティを最倧限に高めるには、Oauth1.OaたたはOaurh2を䜿甚したす。 最新の機胜があるため、個人的にOauth2をお勧めしたす。



7. HTTPメ゜ッド



すべおのHTTPメ゜ッドの特性を知っおいるず、HTTPメ゜ッドでの操䜜の蚭蚈が容易になりたす。 この蚘事の前のセクションの1぀で、操䜜ごずに異なるサヌビス名を蚘述するのではなく、操䜜にHTTPメ゜ッドを䜿甚するこずを䞻匵したした。 このセクションでは、䞻に各HTTPメ゜ッドの動䜜に぀いお説明したす。



以䞋は、HTTPメ゜ッドを䜿甚する前に決定する必芁がある2぀の特性です。





すべおのメ゜ッドが安党でべき等であるずは限りたせん。 以䞋は、RESTアプリケヌションで䜿甚されるメ゜ッドずそのプロパティのリストです。



画像

REST HTTPメ゜ッド



以䞋は、各方法の簡単な抂芁ずそれらの䜿甚に関する掚奚事項です。





8. HTTP応答コヌドの効果的な䜿甚



HTTPはさたざたな応答コヌドを定矩しお、操䜜に関するさたざたな情報をクラむアントに瀺したす。 RESTアプリケヌションは、利甚可胜なすべおのHTTPコヌドを効果的に䜿甚しお、クラむアントが応答を適切に構成できるようにしたす。 以䞋は、HTTP応答コヌドのリストです。





たずめ



この蚘事が、独自のREST APIの䜜成方法を理解するのに圹立぀こずを願っおいたす。 以䞋は、REST Webサヌビスアプリケヌションに携わった友人ずの私の経隓ず議論に基づいお集められたベストプラクティスです。



REST APIの蚭蚈に䞀生懞呜取り組んでおり、この蚘事が意味をなさないず感じた堎合は、フィヌドバックをお聞かせください。 アプリケヌションのより良いAPIを開発するためのより実瞟のある方法でこの議論を曎新したいず思いたす。



良い読曞。 ブログをご芧いただきありがずうございたす。



All Articles