일단 HTTP 메소드에 따라서 GET POST PUT DELETE를 잘 이용하는건 정말 좋긴 합니다.

하지만 REST API의 url 스타일 있잖습니까..

예를 들자면 아래와 같은 스타일의...

https://api.cloudflare.com/client/v4/zones/ae9c0a97438d436f2ae8cc4fca7650b9/settings/ssl

이런게 꼭 필요한걸까? 하는 의문이 정말 강하게 듭니다...

저렇게 하면 물론 url이 예쁘고 깔끔하게 나오긴 합니다...

하지만 브라우저 주소창에 표시되는 url 이면 모를까 어차피 소스 내부에서만 사용되는 url의 모양새가

예쁜게 무슨 의미가 있을까요? 물론 예쁘다고 해서 나쁠건 없지만 문제는 저 모양새를 서버에서 파싱하고

인식하기 위해 들어가는 수고와 노력이 뭔가 무의미하게 느껴져서 그렇습니다.

PHP에서 저런 스타일의 REST API를 만들면서 그나마 최대한 가볍게 하려면

SLIM 프레임워크 정도가 답인데.. 사실 SLIM 프레임워크도 프레임워크가 아예 없는 것과 비교한다면

그렇게 가볍다고 할 수는 없지요..

그냥 뒤에 query string으로 파라미터 전달하는게 사실 뭐가 그리 문제입니까...

자바스크립트로 짜면서 생각해보면 사실 api 호출도 그냥 query string으로 전달하는게 훨씬 소스도 예쁘게 나와요.

예를 들어서 

params = { param_a:1, param_b:2 }

$http.get('addr', params)

or 

$http.get('api_addr', { param_a:1, param_b:2 })

이렇게만 하면 간단하고 예쁘게 호출되는데요.. 

이걸 REST API 스타일로 호출하려면

params = { param_a:1, param_b:2 }

$http.get('api_addr/' + params.param_a + '/' params.param_b)

이렇게 해야 합니다. 어느쪽이 가독성이 높고 예쁜가요?
그뿐만 아니라 query_string으로 전달하는 쪽이 필요에 따라 전달되는 변수 갯수 자체를

맘대로 조절할 수 있어서 API 구성에 있어서도 자유도가 높죠.

 

  • profile

    쿼리스트링이든 /a/b/c 형식이든 어차피 문자열일 뿐... 요즘 컴퓨터 입장에서 몇십 바이트짜리 문자열 다루는 것은 효율성을 따질 필요조차 없지요. 문자열 조립하는 것은 sprintf를 쓰면 되고요.

    저런 주소가 널리 사용되는 이유는 PHP 이외의 다른 언어들을 생각해 보면 간단합니다. 특정한 경로에 실제 파일이 존재하고 그 뒤에 쿼리스트링을 붙일 수 있는 PHP와 달리, 대부분의 다른 언어들은 주소를 분석해서 내부적으로 라우팅해야 하죠. 이 경우에는 파일명?쿼리스트링 형식이든 /a/b/c 형식이든 정말로 아무 차이가 없습니다. 정규식을 쓰거나 "/" 문자로 split하기에는 오히려 후자가 편할 수도 있고요.

    개인적으로 제일 짜증나는 것은 쿼리스트링이나 일반적인 POST 요청 대신 JSON으로 파라미터를 전달하라고 하는 API들이예요. 대량의 데이터를 주고받으려고 하면 쿼리스트링으로도 부족하니 REQUEST BODY에 내용이 들어가야 하는 건 어쩔 수 없는데, POST 요청에 사용하는 멀쩡한 표준을 두고 모조리 JSON으로 인코딩하라고 하니...