개발관련/other

RESTful 검색 / 필터링을 설계하는 방법

Rateye 2021. 7. 28. 10:27
728x90
반응형

 

질문 : 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&parameter2=value2&parameter3=value3&parameter4=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
728x90
반응형