7

一部のリソースをクエリパラメーターでフィルタリングできるRESTAPIを設計しています。場合によっては、これらのフィルター値は同じRESTAPIからのリソースになります。これにより、長くてかなり読みにくいURIが作成されます。URIはプログラムで作成および操作されることを目的としているため、これ自体はそれほど問題にはなりませんが、デバッグに手間がかかります。フィルタ値として使用されるURIへのショートカットを許可することを考えていましたが、これがRESTアーキテクチャに従って許可されているかどうか、およびベストプラクティスがあるかどうか疑問に思います。

例えば:

Javaクラスを取得するリソースがあります。次に、次のリクエストですべてのJavaクラスが提供されます。

GET http://example.org/api/v1/class

Javaクラスのすべてのサブクラスが必要Collectionだとすると、次のリクエストを使用します。

GET http://example.org/api/v1/class?has-supertype=http://example.org/api/v1/class/collection

その要求は、私VectorとJavaクラスArrayListの他のすべてのサブクラスを返します。Collection

ただし、そのURIはかなり長いです。hsのエイリアスとして許可することで、すでに短縮できhas-supertypeます。これは私に与えるでしょう:

GET http://example.org/api/v1/class?hs=http://example.org/api/v1/class/collection

より短いURIを許可する別の方法は、URIプレフィックスのエイリアスを許可することです。たとえばclass、URIプレフィックスのエイリアスとして定義できますhttp://example.org/api/v1/class/。それは私に次の可能性を与えるでしょう:

GET http://example.org/api/v1/class?hs=class:collection

もう1つの可能性は、クラスエイリアスを完全に削除し、パラメータ値の前に常にプレフィックスを付けるhttp://example.org/api/v1/class/ことです。これが私がサポートする唯一のものだからです。これにより、のすべてのサブタイプのリクエストが次のようにCollectionなります。

GET http://example.org/api/v1/class?hs=collection

元のリクエストURIのこれらの「簡略化」は、RESTアーキテクチャの原則に準拠していますか?それとも私はただディープエンドを離れたのですか?

補遺:URIには一度に複数のフィルターが含まれる場合があります。異なるパラメーターとして、または単一のパラメーターの値のリストとして。http://example.org/api/v1/packages/a/b/c「インターフェイスXおよび/またはインターフェイスYを実装するすべてのクラス」または「インターフェイスXを実装し、パッケージABCに含まれるすべてのクラス」(パッケージも次のようなURIにアドレス指定可能)の方針に沿って考えてください。

4

1 に答える 1

4

私は作りに行きます:

GET http://example.org/api/v1/class/java.util.Collection/subclasses

直接サブクラスごとに1つずつ、RESTfulAPIの他のエントリへのリンクのリストを返します。また、その情報を、次のユーザーから返される記述子の一部として利用できるようにします。

GET http://example.org/api/v1/class/java.util.Collection

(これには、前の特定のクエリへのリンクも含まれます。)

于 2010-05-12T13:11:59.977 に答える