1

JsonApi を使用して、Rest API のメソッドへのリンクを含めるにはどうすればよいですか?たとえば、次のようなものがあります。

POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate

それに応じて顧客をアクティブ化および非アクティブ化するため。それらをデータ オブジェクトにどのように含めるか (または含めないか)。仕様には、データ オブジェクトの「メソッド」セクションのようなものは含まれていません。

4

3 に答える 3

3

あなたの変更とguillaume31の回答に基づいて更新します。

本当にリソースの更新である場合は、パッチを次の場所に発行する必要があります: api/v1/customer/1

そして、リソースを更新するための jsonapi 準拠の本体を使用します。

{
  "data": {
    "type": "customer",
    "id": "1",
    "attributes": {
        "status": "deactivated"
    }
  }
}

リソースを完全に削除することが意図されている場合は、削除の方が適切な場合があります。説明に基づいて、リソースがまだ存在し、他の呼び出しに基づいて復元される可能性があるため、PATCH が最適なパスである可能性があります

于 2015-09-22T00:12:11.737 に答える
1

POST api/v1/customer/1/deactivate

POST api/v1/customer/1/activate

これは RESTful ではありません。しかし、顧客の「アクティブな」状態はリソースと見なすことができます。したがって、最も簡単な解決策は次のとおりです。

PUT api/v1/customer/1/active      # Activates customer 1
DELETE api/v1/customer/1/active    # Deactivates customer 1

@guillaume31 によって記述された PATCH ソリューションも有効なアプローチですが、RESTful PATCH を正しく実装するには、操作、データ ポインター、および新しい値を使用して変更を記述する必要があります ( JSON Patch RFCも参照してください)。この単純なシナリオでは、おそらくやり過ぎです。

于 2015-09-22T16:46:15.423 に答える
0

URI の一部として「非アクティブ化」を含めることで、リソースを非アクティブ化することになりますが、これは正しくないようです。この IMO はREST レベル 1に準拠していません。

私が理解しているように、顧客をアクティブ化/非アクティブ化することは、リソースを更新することになります。JsonApi は、リソースを変更するために PATCH リクエストを送信することを推奨しています: http://jsonapi.org/format/#crud-updating

ただし、アクティブ化を POST または PUT としてモデル化し、非アクティブ化を DELETE としてモデル化する方が、REST に忠実である可能性があります。PUT と DELETE の冪等性の恩恵を受けることができます。顧客を 2 回続けてアクティブ化または非アクティブ化すると、おそらく同じ状態のままになるはずです。ただし、ドメインと、これらのアクションがもたらす結果にも依存します。

私が知っている REST フレームワークでは、そのままでは動詞はリンクに含まれていません。JSON APIの場合もそうではないようです。

于 2015-09-22T09:40:40.027 に答える