我々は2つの部分に分割されたアプリケーションがあります。REST URIテンプレート
- 管理 - データが
- 公共変更された - データが
Iを読まれますこの機能を提供するREST APIの作成を検討しています。 CRUD操作をどのように表現することができるのかはとても簡単ですが、個々のリソース上の特定の操作(コマンド)についてはわかりません。たとえば、 "Publish"にはProject
、 "PublishCommand"は送信します。サーバーのPublished
プロパティをtrue
に設定して、サーバー全体にProject
を戻しません。
同様の注記では、RPCタイプのサービスとして分類されることなく、リソースに対するより高度なクエリ操作をどのように表現すべきかについて少し混乱します。
私のProject
リソースのURIテンプレートを以下に示します。本当にRESTfulなAPIを作成するための正しい道はありますか?
ADMIN API
---------
// Project Resources
GET /projects -- get all projects
POST /projects -- create a new project
// Project Resource
GET /projects/10 -- get project with id 10
PUT /projects/10 -- update project with id 10
DELETE /projects/10 -- delete project with id 10
// Project Resource Operations
POST: /projects/10/publish -- publish project with id 10
POST: /projects/10/unpublish -- unpublish project with id 10
POST: /projects/10/setposition/2 -- move to position 2 in projects list
// Project Sub resources (identity is local to project)
POST: /projects/10/media -- adds media to project with id 10
PUT: /projects/10/media/5 -- updates media id 5 for project id 10
DELETE: /projects/10/media/5 -- deletes media id 5 from project id 10
PUBLIC API
----------
GET: /projects -- gets all projects (with default limit e.g. first 10)
GET: /projects?skip=10&take=10 -- gets projects 11 to 20
GET: /projects/tagged/rest OR /taggedprojects/rest -- gets projects tagged with "REST"
GET: /projects?orderbydesc=publishdate OR /latestprojects -- gets latest projects
GET: /projects/10 -- gets project with id 10
これを見るでしょう。しかし、動作を伝えるためにHTTP動詞を使用することは、RESTの一部であることを忘れないでください。http://martinfowler.com/articles/richardsonMaturityModel.html – Aliostad
ありがとうDennis。これは私の心配です。私はドメインモデルの豊かさを妥協する必要はないので、話すためのRESTfulなAPIを提供することができます。 –
コマンドを表すリソースに対して、GET、PUTまたはPOSTを使用してyorクエリーをリクエストできます。これは、CRUDを超えたドメインモデルの豊かさを提供し、依然としてHTTPの固有のセマンティクスを使用します。しかし、私はいくつかの人々がこの意見を共有していないことを知っています。 –