질문 : RESTful 검색 / 필터링을 설계하는 방법은 무엇입니까?
현재 PHP에서 RESTful API를 설계하고 구현하고 있습니다. 그러나 초기 디자인을 구현하는 데 실패했습니다.
GET /users # list of users
GET /user/1 # get user with id 1
POST /user # create new user
PUT /user/1 # modify user with id 1
DELETE /user/1 # delete user with id 1
지금까지 꽤 표준이 맞죠?
내 문제는 첫 번째 GET /users
입니다. 목록을 필터링하기 위해 요청 본문에 매개 변수를 보내는 것을 고려하고있었습니다. 이것은 다음과 같이 매우 긴 URL을 얻지 않고도 복잡한 필터를 지정할 수 있기를 원하기 때문입니다.
GET /users?parameter1=value1¶meter2=value2¶meter3=value3¶meter4=value4
대신 나는 다음과 같은 것을 원했습니다.
GET /users
# Request body:
{
"parameter1": "value1",
"parameter2": "value2",
"parameter3": "value3",
"parameter4": "value4"
}
훨씬 더 읽기 쉽고 복잡한 필터를 설정할 수있는 큰 가능성을 제공합니다.
어쨌든 file_get_contents('php://input')
GET
요청에 대한 요청 본문을 반환하지 않았습니다. 또한 http_get_request_body()
시도했지만 사용중인 공유 호스팅에는 pecl_http
가 없습니다. 어쨌든 도움이되었을 지 확실하지 않습니다.
이 질문을 발견하고 GET에 요청 본문이 없어야한다는 것을 깨달았습니다. 그것은 약간 결정적 이었지만 그들은 그것에 대해 조언했습니다.
그래서 지금은 무엇을 해야할지 모르겠습니다. RESTful 검색 / 필터링 기능을 어떻게 설계합니까?
POST
사용할 수 있다고 생각하지만 그다지 RESTful하지는 않습니다.
답변
RESTful 검색을 구현하는 가장 좋은 방법은 검색 자체를 리소스로 간주하는 것입니다. 그런 다음 검색을 생성하기 때문에 POST 동사를 사용할 수 있습니다. POST를 사용하기 위해 말 그대로 데이터베이스에 무언가를 만들 필요는 없습니다.
예를 들면 :
Accept: application/json
Content-Type: application/json
POST http://example.com/people/searches
{
"terms": {
"ssn": "123456789"
},
"order": { ... },
...
}
사용자의 관점에서 검색을 작성하고 있습니다. 이것의 구현 세부 사항은 관련이 없습니다. 일부 RESTful API는 지속성이 필요하지 않을 수도 있습니다. 이것이 구현 세부 사항입니다.
출처 : https://stackoverflow.com/questions/5020704/how-to-design-restful-search-filtering
'개발관련 > other' 카테고리의 다른 글
JSON에서 여러 줄 문자열이 허용될까? (0) | 2021.07.30 |
---|---|
하위 도메인과 도메인간에 쿠키 공유 (0) | 2021.07.28 |
[스위프트] 문자열 유형으로 enumerate을 enum하는 방법 (0) | 2021.07.27 |
equal, eql, ===, ==의 차이점 (0) | 2021.07.23 |
HTTP 파일 업로드하는 방법 (0) | 2021.07.22 |