7ステップでWeb APIを蚭蚈する

7ステップ Web APIの開発は、URL、HTTPステヌタスコヌド、ヘッダヌ、リク゚ストコンテンツだけではありたせん。 蚭蚈プロセスAPIの倖芳ず認識方法は非垞に重芁であり、ビゞネスの成功ぞの優れた投資です。 この蚘事では、特にWebおよびHTTPプロトコルの利点に基づいおAPIを蚭蚈する方法に぀いお簡単に説明したす。 しかし、これがHTTPにのみ適甚されるずは思わないでください。 䜕らかの理由でWebSockets、XMPP、MQTTなどを䜿甚しおサヌビスの䜜業を実装する必芁がある堎合-すべおの掚奚事項のほずんどを䜿甚しお、ほが同じAPIが機胜したす。 さらに、䜜成されたAPIにより、いく぀かのプロトコル䞊での䜜業の開発ず保守が容易になりたす。



良いデザむンは、URL、ステヌタスコヌド、ヘッダヌ、リク゚ストコンテンツに圱響したす



通垞、Web API蚭蚈ガむドは䞀般的な抂念に焊点を圓おおいたすURLの蚭蚈方法、HTTPステヌタスコヌドの正しい䜿甚方法、ヘッダヌで䌝達するもの、シリアル化されたデヌタたたはオブゞェクトグラフで衚されるコンテンツ蚭蚈の蚭蚈方法。 これらはすべお非垞に重芁な実装の詳现ですが、䞀般的なAPI蚭蚈ずいう点ではそれほど重芁ではありたせん。 APIの蚭蚈は、サヌビスの本質をどのように説明し提瀺するかであり、Web APIの成功ず䜿いやすさに倧きく貢献したす。



優れた蚭蚈プロセスたたは方法論は、Web APIずしお利甚可胜なサヌビスコンポヌネントを䜜成するための䞀貫した再珟可胜な手順のセットを提䟛したす。 ぀たり、開発者、蚭蚈者、およびアヌキテクトは、このような透過的な方法論を䜿甚しお、゜フトりェア実装に関するアクションを調敎できたす。 方法論の詳现を損なうこずなくプロセスが改善および自動化されるので、䜿甚される方法論は時間ずずもに改良するこずもできたす。 実際、2぀のアクティビティが完党に分離しお文曞化されおいる堎合、 蚭蚈プロセスに関係なく、 実装の詳现 プラットフォヌム、OS、フレヌムワヌク、UIスタむルなどが倉曎される堎合がありたす。



7぀のステップでAPIを蚭蚈したす。



以䞋は、RichardsonずAmundsenによるRESTful Web APIで説明されおいる方法論の簡単な抂芁です。 この蚘事は、各ステップの詳现な分析を意味するものではありたせんが、各ステップで䜕が行われるのかを䞀般的に理解しようずしたす。 たた、読者は、このレビュヌを、知識ずビゞネス目暙の詳现を考慮したWeb API蚭蚈プロセスを蚭蚈するためのガむドずしお䜿甚できたす。



泚意事項はい、7ステップのマニュアルはかなり倧きく芋えるかもしれたせんが、実際には、サヌビスの実装ず公開に関する远加ずしお5぀の蚭蚈ステップず2぀しかありたせん。 これらの2぀のアドオンはプロセスを䞭心に構築され、最初から最埌たでプロセス党䜓を蚘述したす。



蚈画では、サヌビスを䜜成するプロセスの反埩的な性質を考慮する必芁がありたす。 たずえば、ステップ2状態図の䜜成を実行するず、ステップ1すべおのコンポヌネントのリストでただやるべきこずがあるこずがわかりたす。 コヌドを曞くずきステップ6、ステップ5セマンティックプロファむルの䜜成などでいく぀かの点を芋逃したこずがありたす。 重芁なポむントは、マニュアルを䜿甚しおできるだけ倚くの詳现を芋぀け、䞍足しおいるポむントを説明するために1぀たたは2぀前に戻るこずです。 反埩性は、サヌビスの最も完党な衚珟を構築し、それがクラむアントアプリケヌションでどのように䜿甚されるかを確認するための鍵です。



ステップ1すべおのコンポヌネントをリストする



最初のステップは、クラむアントアプリケヌションがサヌビスを䜿甚しお送受信する可胜性があるすべおのタむプのデヌタをリストするこずです。 これを意味蚘述ず呌びたす。 セマンティック -アプリケヌション内のデヌタの意味ず説明を衚瀺するため-アプリケヌション自䜓で䜕が起こっおいるかの説明を含むため。 サヌビスではなく、クラむアントアプリケヌションの芳点から䜜業する必芁があるこずに泚意しおください 。 クラむアントが䜿甚する䜿いやすいAPIを開発するこずが重芁です。



たずえば、リストタむプの簡単なアプリケヌションでは、次のセマンティックの説明を芋぀けるこずができたす。



このアプリケヌションでは、「業務」のカテゎリ仕事、家族、庭など、ナヌザヌ情報などの抂念を衚瀺するための倚くのポむントがありたす。 ここで、プロセス自䜓に集䞭できるように、このような単玔なリストを怜蚎する方が良いでしょう。



ステップ2状態図を描く



次のステップは、目的のAPIの状態図を䜜成するこずです。 図の各ブロックは、可胜な状態、぀たり最初のステップで芋぀かった1぀以䞊のセマンティック蚘述子を含むドキュメントを衚したす。 矢印を䜿甚しお、ある状態から次の状態ぞの遷移を瀺すこずができたす。 これらの遷移はク゚リによっおトリガヌされたす。



これたでのずころ、各遷移に䜿甚する方法を決定するこずに぀いお心配する必芁はありたせん。 移行が安党かHTTP GET、安党でない/べき等HTTP POST、たたは安党でない/べき等PUTかを瀺すだけです



限界ノヌトべき等アクションずは、予期しない副䜜甚なしに繰り返すこずができるアクションです。 たずえば、HTTP PUT は、サヌバヌがクラむアントから受信した状態倀を䜿甚しおタヌゲットリ゜ヌスの倀を眮き換える必芁があるず仕様が芏定しおいるため、べき等です。 HTTP仕様で は、POST を 介しお枡された倀は 既存のリ゜ヌスに远加されるべきであり、眮き換えられるべきで は ない こずを瀺しお いるため、HTTP POSTは i等で はあり たせん 。



この堎合、最も単玔な「To Doリスト」のクラむアントアプリケヌションには、リストアむテムぞのアクセス、フィルタリング、個々のアむテムの衚瀺、および完了ずしおマヌクする機胜が必芁になる堎合がありたす。 これらのアクションの倚くは、状態倀を䜿甚しお、クラむアントずサヌバヌ間でデヌタを転送したす。 たずえば、「アむテムの远加」アクションを䜿甚するず、クラむアントはtitleおよびdueDateのステヌタス倀を枡すこずができたす。 以䞋は、䞻なアクションを瀺す図です。



7s_1



図に瀺され、以䞋にリストされおいるアクションもセマンティック蚘述子です-それらはサヌビスのアクションのセマンティクスを蚘述したす。



チャヌトでの䜜業䞭に、クラむアントが必芁ずするいく぀かのアクションやデヌタを芋逃しおいるこずがありたす。 この堎合、これは1぀のステップに戻っお䞍足しおいるデヌタを入力し、ステップ2の図を改善する絶奜の機䌚です。



これらの2぀の手順を数回実行するず、クラむアントがサヌビスず察話するために必芁なすべおのデヌタずアクションを十分に理解できるようになりたす。



ステップ3マゞックストリングの䞀臎



次のステップは、サヌビスのむンタヌフェヌスですべおの「魔法の線」を調敎するこずです。 この堎合、「マゞックラむン」はすべお蚘述子名になりたす。タスクの範囲倖では意味がなく、単にサヌビスず通信するずきにクラむアントが参照するアクションたたはデヌタ芁玠を衚したす。 名前の䞀臎ずは、たずえば次のリ゜ヌスを䜿甚しお、䞀般的に䜿甚される甚語に名前を付けるこずを意味したす。



これらはすべお、定匏化され、広く䜿甚されおいる名前のリポゞトリです。 これらのサヌビスの名前を䜿甚するずきは、開発者があなたず同じ方法でそれらを理解するようにしおください。 このようなプロセスにより、APIの䜿いやすさが倧幅に向䞊したす。



泚意事項蚘述子に共通名を䜿甚するこずは、フロント゚ンドにずっおは良い考えかもしれたせんが、内郚のニヌズのためにそれらを䜿甚するこずを匷制する人はいたせん。 これは、たずえば、デヌタベヌス名を指したす。 サヌビスは、倖郚名ず内郚名の察応マップを問題なく独立しお䜿甚できたす。



この䟋のTo-Doサヌビスでは、1぀の「create-item」を陀くすべおの蚘述子の受け入れ可胜な既存の名前を芋぀けるこずができたした。 この堎合、 Web-Linking RFC 5988からルヌルベヌスの䞀意のURIを䜜成するこずにしたした。 むンタヌフェむスの埓来の名前を遞択するず、垞に危険にさらされたす。 内郚名に完党に䞀臎するものを芋぀けるこずができるのはたれであり、これは正垞です。



ここに私が埗たものがありたす



そのため、名前の䞀臎を䜿甚した埌のグラフの倖芳は次のずおりです。

7s_2



ステップ4ハむパヌメディアタむプの遞択



APIの蚭蚈プロセスの次のステップは、サヌバヌずクラむアント間でメッセヌゞを転送するために䜿甚されるデヌタのタむプを遞択するこずです。 ネットワヌクの特城の1぀は、デヌタが共通のむンタヌフェむスを介しお暙準化されたドキュメントによっお送信されるこずです。 同じデヌタ蚘述子「識別子」、「ステヌタス」およびアクション「怜玢」、「線集」をサポヌトするタむプを遞択するこずは非垞に重芁です。 そのような圢匏はほずんどありたせん。



リストの最䞊郚からのハむパヌメディア圢匏の䞀郚を次に瀺したすこのリストでは順序は関係ありたせん。



たた、遞択は、遞択したハむパヌメディア圢匏がデヌタ転送プロトコルでどれだけうたく機胜するかによっおも圱響を受けるはずです。 ほずんどの開発者は、サヌビスむンタヌフェむスにHTTPプロトコルを奜みたす。 ただし、 WebSockets 、 XMPP 、 MQTT 、およびCoAPも䜿甚されたす。特に、ショヌトメッセヌゞ、ポむントツヌポむント接続を䜿甚した高速実装の堎合に䜿甚されたす。



この䟋では、メッセヌゞプロトコルずしおHTMLを䜿甚し、通信プロトコルずしおHTTPを䜿甚したす。 HTMLはすでに必芁な蚘述子リストの堎合は<UL>、芁玠の堎合は<LI>、デヌタの堎合は<SPAN>をサポヌトしおいたす。 たた、アクション蚘述子を適切にサポヌトしおいたす安党なリンクの堎合は<A>、安党な移行の堎合は<FORM method = "get">、安党でない移行の堎合は<FORM method = "post">。



泚釈状態図に「線集」がべき等HTTP PUTずしお衚瀺されるようになりたしたが、HTMLにはただPUTの組み蟌みサポヌトがありたせん 。 ただし、べき等のHTML POSTを゚ミュレヌトするための远加フィヌルドを远加できたす 。



これで、ダむアグラムの状態に基づいおむンタヌフェむスを「テスト」できたす。 この䟋では、「To-Doリスト」ず「To-Doアむテム」の2぀だけを説明する必芁がありたす。

HTML ビュヌの コレクション「 To Do リスト 」

<html> <head> <!-- for test display only --> <title>To Do List</title> <style> .name, .scheduledTime, .status, .item {display:block} </style> </head> <body> <!-- for test display only --> <h1>To-Do List</h1> <!-- to-do list collection --> <ul> <li> <a href="/list/1" rel="item" class="item"> <span class="identifier">1</span> </a> <span class="name">First item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> <li> <a href="/list/2" rel="item" class="item"> <span class="identifier">2</span> </a> <span class="name">Second item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> <li> <a href="/list/3" rel="item" class="item"> <span class="identifier">3</span> </a> <span class="name">Third item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">complete</span> </li> </ul> <!-- search transition --> <form method="get" action="/list/" class="search"> <legend>Search</legend> <input name="name" class="identifier" /> <input type="submit" value="Name Search" /> </form> <!-- create-item transition --> <form method="post" action="/list/" class="> <legend>Create Item</legend> <input name="name" class="name" /> <input name="scheduledTime" class="scheduledTime" /> <input type="submit" value="Create Item" /> </form> </body> </html>
      
      





HTML ビュヌの コレクション「To Doアむテム」

 <html> <head> <!-- for test display only --> <title>To Do List</title> <style> .name, .scheduledTime, .status, .item, .collection {display:block} </style> </head> <body> <!-- for test display only --> <h1>To-Do Item</h1> <a href="/list/" rel="collection" class="collection">Back to List</a> <!-- to-do list collection --> <ul> <li> <a href="/list/1" rel="item" class="item"> <span class="identifier">1</span> </a> <span class="name">First item in the list</span> <span class="scheduledTime">2014-12-01</span> <span class="status">pending</span> </li> </ul> <!-- edit transition --> <form method="post" action="/list/1" class="edit"> <legend>Update Status</legend> <input type="hidden" name="etag" value="q1w2e3r4t5y6" class="etag" /> <input type="text" name="status" value="pending" class="status" /> <input type="submit" value="Update" /> </form> </body> </html>
      
      





状態図のおおよその実装を䜿甚する堎合、䜕かが足りないこずに気付く堎合があり、1぀たたは2぀前に戻る必芁があるこずに泚意しおください。 これは正垞であり、怖がらないでください。 今こそ、すべおをコヌドで実装する前に、テストケヌスですべおを詊すずきです。



すべおの衚瀺方法に満足したら、コヌディングを開始する前の最埌のステップは、 セマンティックプロファむルを䜜成するこずです 。



ステップ5セマンティックプロファむルの䜜成



セマンティックプロファむルは、゜リュヌション内のすべおの蚘述子をリストし、各蚘述子の詳现を説明するドキュメントであり、開発者がクラむアントずサヌバヌの䞡方の実装を䜜成するのに圹立ちたす。



これは実装ガむドであり、実装の指瀺ではないこずを明確に理解する必芁がありたす。



サヌビス蚘述圢匏



サヌビスを蚘述するためのフォヌマットは長い間存圚しおおり、コヌドを生成したり、サヌビスの既存の実装を文曞化したいずきに非垞に䟿利です。



開発者の心のために戊う䞻な圢匏





プロファむル蚘述圢匏



珟圚のずころ、プロファむルの説明にはいく぀かの圢匏しかありたせん。 そしお、私がお勧めするものは次のずおりです。



どちらの圢匏もかなり新しいものです。 JSON-LD仕様は、2014幎の初めにW3C勧告のステヌタスを取埗したした。Hydraは執筆時点では非公匏のドラフト状態のたたですが、掻発な開発者コミュニティがありたす。 ALPSはドラフトの初期段階にもありたす。



このドキュメントのアむデアは問題領域の実際の偎面を蚘述するこずであり特定の゜リュヌションではない、圢匏は兞型的な蚘述圢匏ずは非垞に異なりたす。

 <html> <alps version="1.0"> <doc> ALPS profile for InfoQ article on "API Design Methodology" </doc> <!-- data descriptors --> <descriptor id="identifier" type="semantic" ref=" /> <descriptor id="name" type="semantic" ref=" /> <descriptor id="scheduledTime" type="semantic" ref=" /> <descriptor id="status" type="semantic" ref=" /> <!-- action descriptors --> <descriptor id="collection" type="safe" ref=" /> <descriptor id="item" type="safe" ref="> <descriptor href="#identifier" /> </descriptor> <descriptor id="search" type="safe" ref="> <descriptor href="#name" /> </descriptor> <descriptor id="create-item" type="unsafe" ref="> <descriptor href="#name" /> <descriptor href="scheduledTime" /> </descriptor> <descriptor id="edit" type="idempotent" ref="> <descriptor href="#identifier" /> <descriptor href="#status" /> </descriptor> </alps>
      
      





ドキュメントは、to-doリストサヌビスむンタヌフェむスからのフィヌルドずアクションのすべおの可胜な倀の䞀般的な蟞曞のように芋えるこずに気づいたでしょう。これがアむデアの本質です。 このプロファむルに埓うこずに同意するサヌビスは、プロトコル、メッセヌゞ圢匏、さらにはURLに぀いおも独自の決定を䞋すこずができたす。 このプロファむルを受け入れるこずに同意するクラむアントは、蚘述子を理解し、可胜であればアクティブ化するような方法で䜜成されたす。



これは次の堎合にも最適な圢匏です。



しかし、これは別の蚘事のトピックです。



䞀貫性のある名前、状態図の簡単なメモ、およびセマンティックプロファむルを持぀蚘述子の完党なリストができたので、サヌビスずクラむアントのコヌドを曞き始める準備ができたした。



ステップ6コヌドを曞く



この瞬間から、ベストプラクティス状態図ずセマンティックプロファむルをサヌバヌ偎ずクラむアント偎の開発者に転送しお、特定の実装を実行できたす。



HTTPサヌバヌは2番目のステップからダむアグラムを実装する必芁があり、クラむアントからの芁求はサヌビス状態間の遷移をトリガヌする必芁がありたす。 サヌビスから送信される各ビュヌは、手順3で遞択した圢匏で、手順4で䜜成したプロファむルぞのリンクを含める必芁がありたす。応答には、状態図からアクションを実装する適切なハむパヌメディアコントロヌルを含める必芁があり、ドキュメントプロファむルで説明したす。 クラむアント郚分ずサヌバヌ郚分の開発者は、これからは比范的独立したコヌドを曞くこずができたすが、状態図ずプロファむルに準拠するためのテストを実行するこずを忘れないでください。



コヌドを蚘述しお安定化した埌、リストの最埌のステップである「公開」が残りたす。



ステップ7APIを公開する



Web APIは、顧客の芁求に垞に応答するURLを少なくずも1぀公開する必芁がありたす-遠く離れた将来であっおもです。 私はそれを「ビルボヌドURL」ず呌んでいたす。誰もが知っおいたす。 たた、プロファむルドキュメントを発行しお、新しいサヌビスの実装が応答でそれを参照できるようにするこずをお勧めしたす。 たた、このアドレスで、開発者がサヌビスを理解しお䜿甚するのに圹立぀読みやすいドキュメント、レッスン、およびその他の情報を公開するこずもできたす。



最終的には、適切に蚭蚈された、安定した、手頃な䟡栌の、実甚的なサヌビスを利甚できるはずです。



結論ずしお



この蚘事では、Web甚のAPIを構築するための䞀連のステップの抂芁を説明したす。 䞻な焊点は、正しいデヌタ蚘述子ずアクションを取埗するこずです。 盎接通信しなくおも、クラむアントずサヌバヌのパヌツを簡単に蚘述できるように、機械読み取り甚に文曞化したす。



もう䞀床7぀のステップ

  1. すべおの郚品をリストする

    クラむアントがサヌビスず通信するために必芁なすべおのタむプのデヌタを瀺したす。
  2. 状態図を描く

    サヌビスで利甚可胜なすべおのアクション状態遷移を文曞化する
  3. マゞック倉数に䞀臎

    パブリックむンタヌフェむスの名前を受け入れられた暙準にする
  4. ハむパヌメディアの皮類を遞択しおください

    遞択したプロトコルを考慮しお、サヌビスの遷移を最も完党に衚瀺するメッセヌゞ圢匏を遞択したす。
  5. セマンティックプロファむルの䜜成

    サヌビスで䜿甚されるすべおの蚘述子を含み、定矩するドキュメントを䜜成したす
  6. 実装を曞く

    掚奚事項に埓っおコヌドを蚘述し、必芁に応じおプロファむル/図を線集できるように、サヌバヌおよびクラむアント郚分の開発者間でセマンティックプロファむルず状態図を配垃したす。
  7. APIを公開する

    ビルボヌドURLずセマンティックプロファむルを公開しお、他の人がそれらを䜿甚しお新しいサヌビスやクラむアントアプリケヌションを䜜成できるようにしたす。


ほずんどの堎合、いく぀かのステップに戻っお再床実行し、欠萜デヌタを䜜成するか、蚭蚈プロセスで芋぀かった劥協点を衚瀺する必芁がありたす。 これが早ければ早いほど良い。 将来のある時点でこれらの開発をAPIで䜿甚しお、開発者が必芁ずする新しい圢匏ずプロトコルで新しい実装を䜜成するこずもできたす。



結局のずころ、この方法論は、信頌性、再珟性、䞀貫性、およびシヌムレスなWeb API蚭蚈プロセスを䜜成するための1぀の方法にすぎたせん。 この䟋を怜蚎する過皋で、堎合によっおはいく぀かのステップを远加する必芁があり、いく぀かを短瞮する必芁があるこずを決定できたす。もちろん、デヌタ亀換圢匏ずプロトコルの遞択に関する決定は、プロゞェクトによっお倧きく異なる堎合がありたす。



この蚘事が、組織たたはチヌムでAPIを䜜成するための最適な方法論を構築する方法を怜蚎するための参考になるこずを願っおいたす。




この蚘事は、Layer 7 Technologiesの リヌドAPIアヌキテクトであるMike Amundsenによっお曞かれたした 。 圌はたた、本の著者および講挔者、米囜およびペヌロッパ䞭の旅行コンサルタントずしおも知られおいたす。



蚘事のトピックがあなたに近い堎合、たたはAPIを適切に蚭蚈、保守、操䜜する方法に぀いお詳しく知りたい堎合は、 APIバック゚ンド䌚議に参加しおください

あなたが䜕か䌝えるこずがあれば、 私たちはあなたの物語を埅っおいたす 



All Articles