6

2 つの部分に分割されたアプリケーションがあります。

  1. 管理者 - データが変更される場所
  2. Public - データが読み取られる場所

この機能を提供する REST API の作成を検討しています。CRUD 操作がどのように表されるかを理解するのは非常に簡単ですが、個々のリソースに対する特定の操作 (コマンド) についてはよくわかりません。たとえば、「公開」するProjectには、「PublishCommand」を送信します。プロパティを に設定しProjectてサーバーに完全に戻すことはしません。Publishedtrue

同様に、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
4

2 に答える 2

5

REST が CRUD 操作のみを表すことを意図しているとは思いません。あなたのインターフェースは私には問題ないように見えます。あなたは正しい方向に進んでいると思います。

DDD と REST についてのオンライン トークがあります: RESTful SOA or Domain-Driven Design - A Compromise? ヴォーン・バーノン著。

以下のコメントを含めるように更新します。

GET を使用して読み取りモデルを照会できます。ドメインを変更するには、コマンドを表すリソースに PUT または POST できます。これにより、CRUD を超えた豊富なドメイン モデルが提供され、HTTP 固有のセマンティクスが引き続き使用されます。

于 2012-07-18T13:59:24.103 に答える
2

リソースとして公開する場合は、CRUD (POST/GET/PUT/DELETE) を使用できます。

  • POST でパブリッシュを作成し、プロジェクト ID を渡します
  • 公開を取り消すには DELETE
  • GETして取得する

これは、プロセスがデータベース内のレコードの物理的な作成に関連付けられている必要があるという意味ではありません。重要なのはリソースベースのアプローチです。

于 2012-07-18T13:15:09.647 に答える