반응형
API 서버를 개발하다 보면 입력을 application/x-www-form-urlencoded로 받아야 할지 application/json으로 받아야 할지 결정해야 하는 경우가 있다. 내가 기본적으로 쓰고 있는 형태는 urlencoded인데, 사용자들이 json을 더 선호하는 경우 뭘 써야 할지 고민이 될 수도 있다.
한정된 사용자라면 그냥 하나 지정해주면 된다. 그런데 다양한 이용자들이 편하게 이용하길 원한다거나 경쟁관계의 타사 API 서비스가 있다면 하나의 방식으로 한정하기 보단 보내주는 대로 둘다 받아들일 수 있도록 해주는 것이 좋다.
PHP에서 저 두 가지 정도는 구분해줄 법도 한데, 아쉽게도 구분이 안된다. 정확히 말하면 기본 옵션은 x-www-form-urlencoded이다. 즉 json으로 보내주는 경우 파라미터를 제대로 인식할 수 없다는 것이다. json은 따로 파싱해서 써야 한다.
이럴 때는 Header를 보고 구분해야 한다. 물론 입력값을 가지고 먼저 json_decode를 해서 성공하는 경우 json으로 인식하는 방법도 있으나 소모적이다. 원칙적으로 상대방이 json으로 보내려고 하면 header 또한 application/json 으로 보내야 하기에, 정상적인 호출이라고 가정하고 header의 값을 보고 분기하는 것이 바람직하다.
$headers = apache_request_headers();
if($headers['Content-Type'] == "application/json") {
$reqParam = json_decode(file_get_contents('php://input'), true);
} else {
$reqParam = $_REQUEST;
}
// 클라이언트 검증
$client = $reqParam['id'];
$secret = $reqParam['secret'];
반응형
댓글