一部のリソースをクエリパラメーターでフィルタリングできる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にアドレス指定可能)の方針に沿って考えてください。