4

アプリケーション用にRESTfulHTTPAPIを設計しています。

アプリには、商品があるカテゴリがあります。

ユーザーがカテゴリ内で商品を作成できるようにしたいのですが、そのカテゴリが存在しない場合は、自動的に作成されます。したがって、カテゴリを個別に作成するためのAPIはありません(製品なしでカテゴリを作成してほしくないため)。

このためのAPIをどのように設計すべきかよくわかりません。通常の方法は次のとおりです。

1. Create a category:
   POST /categories {"name": "Movies"}
2. Use the new category's id to create a product:
   POST /categories/:id/products {"name": "The Matrix"}

最初のものをユーザーに公開したくないので、どのようにユーザーに製品を直接作成させる必要がありますか?

4

3 に答える 3

4

製品は、おそらくカテゴリに従属するリソースであってはなりません。属するカテゴリのリストを使用して新しい製品を作成し、/categoriesリソースを使用してカテゴリを参照するだけです。新しいカテゴリが製品のカテゴリリストに表示されると、副作用として新しいカテゴリが追加されます。

1. Create product:
PUT /product/the_matrix {"name":"The Matrix","category_list":["movies","science fiction"]}

2. Browse categories:
GET /categories
于 2012-06-17T14:07:46.877 に答える
2

RMMのレベル2でスタックしているようです。レベル3では、ハイパーメディアコントロールを使用して、リソースとの有効な相互作用を定義できます。例えば

GET / HTTP/1.1

で応答する可能性があります

HTTP/1.1 200 OK
<catalogue href="/">
    <products href="/products"/>
    <categories href="/categories"/>
</catalogue>

productsその後、リンクをたどることができます

GET /products HTTP/1.1

で応答する可能性があります

HTTP/1.1 200 OK

<products href="/products">
    ...
    <create href="/products" method="post">
        <input name="name" type="string" cardinality="required"/>
        <input name="category" type="string" cardinality="required"/>
    </create>
</products>

その後create、次のように新製品を作成できます

POST /products HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=The+Matrix&category=Movies

サーバーが受信するcategoryと、存在しない場合はムービーが作成され、次にマトリックスproductがムービーに追加されcategoryます。一方、categories最初の応答のリンクをたどると、カテゴリを検索および参照するためのメカニズムが提供される場合がありますがcreate、ビジネスルールではユーザーが空のカテゴリを作成できないため、フォームは含まれません。

詳細については、RESTinPracticeを参照してください。

于 2012-06-17T14:15:02.890 に答える
0

はい、あなたは彼らに直接製品を作成させることができます

ユーザーがカテゴリ内で商品を作成できるようにしたいのですが、そのカテゴリが存在しない場合は、自動的に作成されます。したがって、カテゴリを個別に作成するためのAPIはありません(製品なしでカテゴリを作成してほしくないため)。

したがって、カテゴリを明示的に作成することはできません。ただし、その中に製品を作成するには、いくつかのIDが必要です。次の解決策をお勧めします。

カテゴリにはIDが必要です。そして、何らかの方法で、クライアントはカテゴリについて知っている必要があります。したがって、オプションでカテゴリリストを取得する可能性があります。

GET /categories 

とにかく、カテゴリのリストがある場合とない場合で、URLをユーザーに公開して製品を作成できます。

POST /categories/{catIdOrName}/products

この操作では、{catIdOrName}が存在するかどうかを確認し、存在しない場合はその中に製品を作成する必要があります。しかし、本当の意味で、カテゴリの作成は明確ではありません。しかし、そのような振る舞いは可能性があります。

私が見るより良い方法:

  1. カテゴリのリストを取得する操作。
  2. 製品オブジェクト内-カテゴリ付きのプロパティ/フィールド。とにかく、あなたはカテゴリー-製品、
  3. カテゴリオブジェクトフィールド/プロパティ"boolisNew"
  4. ユーザーが商品を新しいカテゴリに作成する場合、isNewはtrueになり、URLでは新しいカテゴリの特別なIDまたは「新しい」文字列IDが使用されます。

    POST / category / new / products

  5. リクエストがあると、すでに存在しているが新規としてマークされているカテゴリが発生します。409コンフリクトを返すより。

  6. 製品が既存のctaegoryになると、URIの実際のカテゴリIDが使用されます。

    POST / category / sports / products

または、別の方法として、カテゴリと製品をURIで独立させます。また、POST / productsによって製品のみを作成します。ここで、Productオブジェクトカテゴリが設定され、実行中に必要に応じて作成されます。また、カテゴリリソースでは、GETによってのみカテゴリのリストを取得できます。

于 2012-06-17T14:05:21.507 に答える