web-dev-qa-db-ja.com

RESTful APIにはスキーマが必要ですか?

最近、適切なRESTful APIが受け入れて返すリソース表現のスキーマを定義する必要があると言われました。たとえば、XMLのXSDとJSONのJSONスキーマ。

しかし、RESTのすべての本と記事で、これを目撃したことは、目立っただけでなく、言及されたこともありませんでした。

RESTful APIを開発するときにスキーマを提供する必要があるかどうかを明確にするために、誰かが信頼できるリソースを提供できますか?

18
Sebastian K

リクエストとレスポンスのインターフェースをRESTful APIに定義して伝達する必要があります何らかの方法応答で。

RESTful API:スキーマと他のインターフェース定義

schema(XSD、JSON Schemaなど)を使用するか、何らかのother形式(自然言語、例など)を使用するか、またはインターフェースを定義するためのいくつかの組み合わせを決定するのはあなた次第です。決定を知らせるfactorsを次に示します。

  • 使用する規則の周知度

    スキーマ:XSDは多くの業界で使用されているW3C標準です。 JSONスキーマは、JSONのXSDのよく知られた代替手段です。

    その他:自然言語と例は実行可能で非常に有用ですが、あいまいまたは不完全です。

  • どのコンベンションがあなたのコミュニティに最も感謝しますか。

    スキーマ:XSDは、特に業界の標準XSDの開発にすでに投資しているコミュニティから高く評価される傾向があります。

    その他:自然言語と例は、初心者に高く評価される傾向があります。

  • 使用する検証プロセスの自動化可能性

    スキーマ:XSDスキーマとJSONスキーマの両方が、既製の自動検証を提供します。

    その他:自然言語と例では、検証のためにアドホックな作業が必要です。

  • 使用するインターフェイスの厳密な型指定または緩い型指定。

    スキーマ:XSDとJSONは、さまざまなタイプの特異性を表現できますが、詳細なタイプの特異性が必要な場合に輝きます。

    その他:自然言語と例は、しばしば不正確ではありますが、型の要件を伝えることができます。

RESTful APIの追加の考慮事項

最後に、スキーマと非スキーマを超えてさらに決定する必要があることに注意してください

  • 時間の経過とともにインターフェイスをバージョン管理する方法
  • 使用するHTTP URL構造、メソッド、応答コードなど
  • これらの考慮事項をすべて管理するかどうか Swagger[〜#〜] raml [〜#〜]ApiaryApigee 、または他のAPIフレームワーク。

これらはすべて、スキーマと他のインターフェイス定義の決定に加えて、サービスの呼び出し元へのREST APIの通信の重要な部分です。

14
kjhughes

RESTful APIを使用するユーザー向けにドキュメント化する必要があります。スキーマは、返される各データ形式により固有のものであり、役立ちます。メソッドと応答形式を適切に定義するAPIリファレンスの例を次に示します。

Google Maps Geocoding API (JSONおよびXML)

SoundCloud HTTP APIリファレンス

CloudFlare APIドキュメントv4

Twitter Search API

私が見るもののほとんどは、示された応答の例と期待されることを説明するチャートで文書化されたリクエストメソッドです(それほど正式なスキーマではありません)。それは人間にとって意味のあるものにします。

1

オプションです。コンテンツの構文とセマンティクスの両方を考慮したユーザーリクエストのきめ細かいフィルタリングが必要な場合は、それを使用します。

  1. 以下は、XMLスキーマに関するRFCガイドラインの言及です。

https://tools.ietf.org/html/rfc347

「XMLスキーマ([41]および[42]で定義)は、許容されるプロトコル構文およびデータ型仕様のより厳密で正確な仕様を可能にする追加機能を提供します。」

  1. JSONスキーマのIETFドラフトは次のとおりです。 https://tools.ietf.org/html/draft-zyp-json-schema-04

「JSONスキーマは、特定のアプリケーションに必要なJSONデータとその対話方法に関する契約を提供します。JSONスキーマは、JSONデータの検証、ドキュメント、ハイパーリンクナビゲーション、および対話制御を定義することを目的としています。」

ご覧のとおり、IETFはこれをRFCとして受け入れませんでした(まだドラフトです)。彼らは、これがJSONのような単純なプロトコルには多すぎると考えました。ただし、多くのオープンソースプロジェクトはこのドラフトに依存しています。

1
skwon