2021-05-18-TIL

RESTful search or filtering

GET /rooms?checkIn="2021-05-10"&checkOut="2021-05-20"&min=10000&max=100000&guests=3 와 같이 url의 파라미터로 값을 포함시키는 것이 바람직한가? 또는 GET /rooms에서 request body를 갖도록 하는 것이 바람직한가? 아니면 POST /rooms에서 request body를 포함시키는 것이 바람직한가?

  1. 많은 참고자료에서 언급한 바로는 적당한 길이의 파라미터라면 GET /rooms?checkIn="2021-05-10"&checkOut="2021-05-20"&min=10000&max=100000&guests=3과 같이 파라미터에 포함시키는 것이 바람직하다고 한다. RESTful 설계에서 GET요청에 body를 가지는 것은 매우 권장하지 않는다.

  2. 그렇다면 파라미터가 매우 긴 경우에도 url에 모든 값을 포함시키는 것이 바람직한가? 여기에서 파라미터에 포함시키지 않는 방법은 POST에 request body를 포함시키는 것이다. 단, 이때는 POST에 해당하는 url에 겹치는 요청이 없어야한다. 만약 겹치게 된다면 또 다른 요청 url을 설계하는 수 밖에 없다.

하지만 POST나 PUT을 사용하는 방법은 예기치 않은 문제를 야기시킬 수 있다는 점에서 권장하지 않는다. 구글의 필터 검색 예시 처럼 최대한 간결하고 짧은 url을 설계하도록 노력해야한다.

결론: GET에서 파라미터를 가지는 방법으로 최대한 해결을 하고, 그것의 여의치 않으면 POST에서 request body를 가지는 방법을 사용한다.

  • https://stackoverflow.com/questions/5020704/how-to-design-restful-search-filtering
  • https://softwareengineering.stackexchange.com/questions/233164/how-do-searches-fit-into-a-restful-interface
  • https://devdocs.magento.com/guides/v2.4/rest/retrieve-filtered-responses.html
  • https://devdocs.magento.com/guides/v2.4/rest/performing-searches.html
  • https://simonplend.com/how-to-build-filtering-into-your-rest-api/
  • https://developers.shopware.com/developers-guide/rest-api/examples/filter/
  • https://stackoverflow.com/questions/7108932/rest-url-structure-advice

Kakao Map API

Name Type Description
x String X 좌표값, 경위도인 경우 longitude(경도)
y String Y 좌표값, 경위도인 경우 latitude(위도)

Kakao Map API를 사용할 것이므로 x, y 좌표에 대한 String 값을 저장하도록 한다.

  • https://developers.kakao.com/docs/latest/ko/local/dev-guide

Web Commerce REST API

  • https://help.hcltechsw.com/commerce/7.0.0/com.ibm.commerce.starterstores.doc/concepts/cwvrestapi.html