新しい内部WebサービスのRESTful APIの仕様を書いています。それほど長くなく、かなり単純ではありませんが、それでも、厳密なRESTを使用するのは初めてです(実際的な理由で不正行為とは対照的に、PUT
およびDELETE
PHPの苦痛など)。RESTインターフェイスをドキュメント化するための標準的な方法やベストプラクティスがあるかどうか、チームの他のメンバーに理解してもらいたい一目で、そしてクライアントを書きたい人のために、基礎となるコードを理解せずにそうすることができるようにします。
ロイの投稿で ここ 彼は述べています
A REST APIは、リソースの表現とアプリケーションの状態の駆動に使用されるメディアタイプの定義、または拡張リレーション名やハイパーテキスト対応マークの定義に、記述的な努力のほとんどすべてを費やす必要があります既存の標準メディアタイプのアップ。対象のURIで使用するメソッドの説明に費やした労力は、メディアタイプの処理ルールの範囲内で完全に定義する必要があります(ほとんどの場合、既存のメディアタイプで既に定義されています) 。
確かに、 REST APIは理想的にはHATEOASを使用し、ハイパーテキスト駆動である必要があります (メディアタイプを多用します)だけでなく、開発者が作業を進めるためのシンプルで人間に優しいドキュメントを用意することも役立ちます。
このようなドキュメントを生成するのに役立つ特定のツール:
私は http://apiary.io を使用していますが、これはかなりいいです。 APIドキュメントをgithubにエクスポートすることもできます。
優れたReSTドキュメントは、メディアタイプとメディアタイプのみをドキュメント化することを意味します。
典型的なシナリオでは、次のようなドキュメントを作成します。
さまざまなリソースへのリンクは、ブックマークURIでサーバーにGETまたはHEADリクエストを発行することで見つけることができるドキュメントに記載されています(通常、サーバーのルート、 http: //www.acme.org )、およびHTTP Linkヘッダーを探します:
Link: <xxx>;rel="http://rel.acme.org/services";type=application/vnd.acme.services+xml
ここで、rel
部分はリンク関係であり、xxx
は関係が確立されたURIです。
このドキュメントでは、次の関係名を定義しています。
application/vnd.acme.services+xml
は、アプリケーションが処理する可能性のあるリンクのリストを記述するxml
シリアル化を持つドキュメントです。
<links>
<link rel="http://rel.acme.org/customers" href="http://www.acme.org/services/customers" type="application/vnd.acme.customers+xml" />
</link>
applcation/vnd.acme.customers+xml
は、顧客を説明するxml
シリアル化されたドキュメントです。
<customers>
<customer firstname="Darth" lastname="Vador" href="http://www.acme.org/services/customers/28" />
</customer>
等...
ポイントは、開発者が定義したリンクをたどる方法を提供することです。最初にindexへのリンクを見つけて、ナビゲートできるもののリストを取得できるようにします。
そのドキュメントを発見すると、特定のUriで顧客のリストを見ることができ、それに対してGET
を実行できることを発見します。
関心のある顧客が見つかった場合、/customers/customer/@href
とGET
を発行して、その顧客の表現を取得します。
そこから、メディアタイプに、より多くのリンクを使用して、ユーザーが使用できるアクションを埋め込むことができます。また、リソースでOPTIONSリクエストを発行して、リソースの削除を許可できるかどうかを確認したり、変更後にドキュメントを保存できる場合はPUTを追加したりすることもできます。
したがって、優れたドキュメントは決してありません。
このすべてのポイントは、クライアントとサーバー間の最小限の結合を実現することです。クライアントは、リソースの表示と検出(フォームの表示と神が他に何を知っているか)を非常に賢くすることができますが、実際のワークフローが何であるかについてはまったく馬鹿です:サーバーが決定します。
私の会社では、Webアプリケーション記述言語 [〜#〜] wadl [〜#〜] を使用して非常に満足しています。 Wikipedia describes it as:「HTTPベースのWebアプリケーションの機械可読な説明を提供するXMLベースのファイル形式」。生のWADLの記述、読み取り、理解が容易であり、RESTfulの概念に直接対応していることがわかりました。公式プロジェクトでは、XSDとRELAX NGスキーマ、およびJavaツール。
WADLを操作するためのツールとリソースは次のとおりです。
ヒント:XHTML名前空間を使用して、HTML要素を含めることにより、WADLドキュメントのdoc
要素に、説明、概念、開始、使用のヒントなど、人間が読めるドキュメントを含めるようにしてください。それは大きな違いを生むことができます!
最初は、リソースの静的なドキュメントを探しましたが、あまりにも多くの質問に答えなければなりませんでした。最終的に、IO/Docs(実際には fork )を使用したLiveドキュメントページの使用に移行しました。うまく機能しています。
rest-tool が便利かもしれません。
言語に依存しないアプローチに従って、RESTful APIの仕様、模擬実装、自動化された単体テストを記述します。また、クックブックも提供しますが、非常に初期の段階ですが、その内容は継続的に成長しています。
先ほど説明したサービスはすぐに使用できるため、実験にも適しています。
理解/ドキュメントを作成するために、重量級のソリューションは必ずしも必要ではありません。 (すばらしい)ヘビーウェイトツールの例:IO/Docs/Apigee(すばらしいツールですが)。
すでにdocchainのセットアップ(doxygen/phpdoc/phpdoctor/custom/etc)がある小さなプロジェクトの場合、次のシェルスクリプトを使用して、生成された完全なドキュメントにページを含めるだけです。
https://Gist.github.com/4496972
ソースコードでカスタムのコメントタグを使用するだけです。また、ソースコード(言語)を文書化するための良い出発点にもなります。