나는 그들이 일반적으로 이것을 위해 설계하기 때문에 이것을 처리하기 위해 POST 또는 PATCH 방법을 사용할 수 있다고 생각합니다.
POST메소드 사용 은 일반적으로 목록 리소스에서 사용될 때 요소를 추가하는 데 사용되지만이 메소드에 대해 여러 작업을 지원할 수도 있습니다. 이 답변 : How to Update a REST Resource Collection을 참조하십시오 . 입력에 대해 다른 표현 형식을 지원할 수도 있습니다 (배열 또는 단일 요소에 해당하는 경우).
이 경우 업데이트를 설명하기 위해 형식을 정의 할 필요가 없습니다.
PATCH해당 요청이 부분 업데이트에 해당하므로 메서드를 사용하는 것도 적합합니다. RFC5789 ( http://tools.ietf.org/html/rfc5789 ) 에 따르면 :
HTTP (Hypertext Transfer Protocol)를 확장하는 여러 응용 프로그램에는 부분적인 리소스 수정 기능이 필요합니다. 기존 HTTP PUT 방법은 문서의 완전한 대체 만 허용합니다. 이 제안은 기존 HTTP 리소스를 수정하기 위해 새로운 HTTP 메소드 인 PATCH를 추가합니다.
이 경우 부분 업데이트를 설명하는 형식을 정의해야합니다.
나는이 경우에 그 생각, POST그리고 PATCH당신이 정말로 각 요소에 대해 수행 할 작업을 설명 할 필요가 없기 때문에 매우 유사하다. 보낼 표현의 형식에 따라 달라집니다.
의 경우 PUT는 좀 덜 명확합니다. 사실, 메소드를 사용할 때 PUT전체 목록을 제공해야합니다. 사실, 요청에 제공된 표현은 목록 리소스 1을 대체합니다.
리소스 경로와 관련하여 두 가지 옵션이 있습니다.
이 경우 요청에서 제공하는 표현에 바인더가있는 문서의 링크를 명시 적으로 제공해야합니다.
다음은 이에 대한 샘플 경로입니다 /docs.
이러한 접근 방식의 내용은 다음과 POST같습니다.
[
{ "doc_number": 1, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 2, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 3, "binder": 5, (other fields in the case of creation) },
(...)
]
또한 문서와 바인더 간의 링크를 설명하기 위해 하위 경로를 활용하는 것도 고려할 수 있습니다. 문서와 바인더 간의 연결에 대한 힌트는 이제 요청 콘텐츠 내에서 지정할 필요가 없습니다.
다음은 이에 대한 샘플 경로입니다 /binder/{binderId}/docs. 이 경우 문서 목록을 메서드와 함께 보내 POST거나 PATCH문서 binderId가없는 경우 문서를 만든 후 식별자를 사용하여 바인더에 문서를 첨부 합니다.
이러한 접근 방식의 내용은 다음과 POST같습니다.
[
{ "doc_number": 1, (other fields in the case of creation) },
{ "doc_number": 2, (other fields in the case of creation) },
{ "doc_number": 3, (other fields in the case of creation) },
(...)
]
응답과 관련하여 응답 수준과 반환 할 오류를 정의하는 것은 사용자의 몫입니다. 상태 수준 (글로벌 수준)과 페이로드 수준 (얇은 수준)의 두 가지 수준이 있습니다. 또한 요청에 해당하는 모든 삽입 / 업데이트가 원자 적이어야하는지 여부를 정의하는 것은 사용자의 몫입니다.
이 경우 HTTP 상태를 활용할 수 있습니다. 모든 것이 잘되면 상태가 200됩니다. 그렇지 않은 400경우 제공된 데이터가 올바르지 않거나 (예 : 바인더 ID가 유효하지 않음) 다른 상태와 같은 다른 상태 입니다.
이 경우 상태 200가 반환되고 수행 된 작업과 결국 오류가 발생하는 위치를 설명하는 것은 응답 표현에 달려 있습니다. ElasticSearch에는 대량 업데이트를 위해 REST API에 엔드 포인트가 있습니다. 이 수준에서 몇 가지 아이디어를 얻을 수 있습니다. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html .
제공된 데이터를 처리하기 위해 비동기 처리를 구현할 수도 있습니다. 이 경우 HTTP 상태 반환은입니다 202. 클라이언트는 어떤 일이 발생하는지 확인하기 위해 추가 리소스를 가져와야합니다.
완료하기 전에 OData 사양이 내비게이션 링크 라는 기능을 사용하여 엔티티 간의 관계에 관한 문제를 해결하고 있음을 알고 싶습니다 . 아마도 당신은 이것을 볼 수 있습니다 ;-)
다음 링크도 도움이 될 수 있습니다 : https://templth.wordpress.com/2014/12/15/designing-a-web-api/ .
도움이 되었기를 바랍니다, Thierry
GET /docs특정 바인더 내의 모든 문서를 호출 하고 검색합니다GET /docs?binder_id=x. 자원의 부분 집합 내가 부를 것이다 삭제DELETE /docs?binder_id=x또는 내가 전화해야DELETE /docs로모그래퍼{"binder_id": x}요청 본문에?PATCH /docs?binder_id=x일괄 업데이트에 사용 하시겠습니까 , 아니면 그냥PATCH /docs통과 쌍을 사용 하시겠습니까?