JsonApi を使用して、Rest API のメソッドへのリンクを含めるにはどうすればよいですか?たとえば、次のようなものがあります。
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
それに応じて顧客をアクティブ化および非アクティブ化するため。それらをデータ オブジェクトにどのように含めるか (または含めないか)。仕様には、データ オブジェクトの「メソッド」セクションのようなものは含まれていません。
JsonApi を使用して、Rest API のメソッドへのリンクを含めるにはどうすればよいですか?たとえば、次のようなものがあります。
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
それに応じて顧客をアクティブ化および非アクティブ化するため。それらをデータ オブジェクトにどのように含めるか (または含めないか)。仕様には、データ オブジェクトの「メソッド」セクションのようなものは含まれていません。
あなたの変更とguillaume31の回答に基づいて更新します。
本当にリソースの更新である場合は、パッチを次の場所に発行する必要があります: api/v1/customer/1
そして、リソースを更新するための jsonapi 準拠の本体を使用します。
{
"data": {
"type": "customer",
"id": "1",
"attributes": {
"status": "deactivated"
}
}
}
リソースを完全に削除することが意図されている場合は、削除の方が適切な場合があります。説明に基づいて、リソースがまだ存在し、他の呼び出しに基づいて復元される可能性があるため、PATCH が最適なパスである可能性があります
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も参照してください)。この単純なシナリオでは、おそらくやり過ぎです。
URI の一部として「非アクティブ化」を含めることで、リソースを非アクティブ化することになりますが、これは正しくないようです。この IMO はREST レベル 1に準拠していません。
私が理解しているように、顧客をアクティブ化/非アクティブ化することは、リソースを更新することになります。JsonApi は、リソースを変更するために PATCH リクエストを送信することを推奨しています: http://jsonapi.org/format/#crud-updating
ただし、アクティブ化を POST または PUT としてモデル化し、非アクティブ化を DELETE としてモデル化する方が、REST に忠実である可能性があります。PUT と DELETE の冪等性の恩恵を受けることができます。顧客を 2 回続けてアクティブ化または非アクティブ化すると、おそらく同じ状態のままになるはずです。ただし、ドメインと、これらのアクションがもたらす結果にも依存します。
私が知っている REST フレームワークでは、そのままでは動詞はリンクに含まれていません。JSON APIの場合もそうではないようです。