2016-12-07 6 views
0

대용량 데이터 집합을 반환하는 끝점을 노출하고 있습니다. 한 시간에 한 번 실행되고 데이터를 생성하는 백그라운드 프로세스가 있습니다. 데이터는 매 실행마다 달라집니다.요청 본문이있는 읽기 용 끝점 용 HTTP 동사

리퀘 스터는 전체 데이터 세트 또는 서브 세트를 요청할 수 있습니다. 하위 집합은 매개 변수 집합을 통해 결정되지만 매개 변수가 너무 커서 최대 길이 2,083자인 URI에는 적합하지 않습니다. https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=uri%20max%20length

매개 변수는 요청 본문에서 쉽게 전송할 수 있지만 사용할 올바른 HTTP 동사는 무엇입니까?

이상적인 것 갔지만 본체의 사용 HTTP GET with request body

PUT '는 GET 요청에 대한 의미 론적 의미가 없다'가 어떤 ID가없고, 데이터가 갱신되거나 대체되고 있기 때문에 적절하지 않다.

POST은 새 리소스가 교체되지 않고 서버가 생성 및 ID되지 않아 적합하지 않습니다. http://www.restapitutorial.com/lessons/httpmethods.html

GET (읽기)이 가장 적절하지만 어떻게 응답을 결정하기 위해 복잡한 매개 변수 집합을 포함 할 수 있습니까?

많은 감사

답변

0

당신은 피해야 바로 그 몸 GET입니다 있습니다. 요청 본문 (예 : REPORT 또는 SEARCH)을 사용하는 다른 안전한 방법으로 실험하거나 POST를 실제로 사용할 수 있습니다. 나는 후자가 왜 틀린 지 아무 이유도 보지 않는다; 당신이 인용 한 것은 단지 의견 일 뿐이며 사양이 아닙니다.

+0

의견에 감사드립니다. Julian. https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 대화를 시작하는 riskk에서 나는 우리 둘은 용 9.5 시간이 있는지 ANM은 - 더 종속 없다 그래서 POST는 밖으로 보일 것입니다. 9.6 - 동봉 된 항목은 저장되지 않으므로 PUT도 부적절한 것으로 보입니다. 나는 REPORT의 개념을 정말 좋아하므로 이것을 더 깊이 조사 할 것이다. – JoHo

+0

RFC 2616은 전적으로 관련이 없습니다. 현재 사양은 https://greenbytes.de/tech/webdav/rfc7231.html#POST를 참조하십시오. –

0

큰 데이터 세트에 대한 쿼리가 완전히 무작위가 아니라고 가정하면 저장된 쿼리를 API에 추가하는 것을 고려해야합니다. 이렇게하면 클라이언트가 POSTDELETEPUT을 사용하여 쿼리를 추가, 제거 및 업데이트 할 수 있습니다 (요청 본문을 통해). 어쩌면 당신은 그것들을 "보고서"라고 부를 수 있습니다.

GET 요청은 이러한 쿼리/보고서에 대한 쿼리 매개 변수로 참조 만 필요하므로 모든 요청마다 모든 세부 정보를 보낼 필요가 없습니다.

그러나 클라이언트의 모든 요청이 고유하지 않은 경우에만 가능합니다.

+0

안녕하세요 Szabolcs, 솔루션은 실제로 몇 가지 쿼리를 저장하고 우리는 당신이 제안한 시나리오 (위대한 마음!)를 제공합니다. 그러나이 컨텍스트에서 요청은 데이터의 하위 집합에 대한 것이고 요청자는 요청을 저장할 수 없습니다 . 어쩌면 우리는 이것을 다시 생각해야합니다. 아이디어를 가져 주셔서 감사합니다. – JoHo

0

POST가 올바른 방법입니다. 본체에서 GET 작업을 수행 할 표준이 없으므로 HTTP에 의해 표준화되지 않은 작업에는 POST를 사용해야합니다. 링크 된 참조는 REST 방지 패턴 인 HTTP 메소드를 CRUD에 직접 매핑하는 것입니다.