2013-08-01 7 views
2

backbone.js에서 PHP 컨텍스트로 REST API를 연구/작성했습니다.REST API 요청 메소드 입력 매개 변수

나 HTTP 동사 개념을 이해하고는 나도 식별자를 전달하는 개념을 이해

GET - select

POST - create

PUT - update

DELETE - delete

를 표기 할 때 의미 URL로 예 : 이러한 경우

DELETE http://api/users/123

GET http://api/users/123는 "123"비즈니스 로직을 얻기 위해 사용하는 ID입니다/사용자를 삭제합니다.

하지만 POST 및 PUT 컨텍스트는 어떻게됩니까? 제공된 매개 변수를 사용하여 사용자 ID (123)를 업데이트합니다

PUT http://api/users/123

API에 요청을 보낼 때 내 질문에 발생하는 곳, 여기.

업데이트 할 입력 매개 변수가 PUT 매개 변수로 전송된다고 가정합니다. php 구문에서 이것은 file_get_contents('php://input') (삭제 요청과 동일합니다.)

backbone.js를 통해 이것을 테스트 할 때 완벽하게 작동합니다.

는하지만 시도

POST http://api/users/

에 새로운 요소를 만들 때 입력 값 POST 파라미터로서 송신 할 가정 것이다/PHP 구문 이는 $_POST로 표현된다. 그러나 이것은 효과가 없습니다.

몇 가지 테스트를 한 후 레일 스타일 REST API (백본 문서에서 제안하는 것)를 읽으면 모두 요청 변수가 같은 방식으로 전송된다는 것을 깨달았습니다. file_get_contents('php://input')을 사용하여 모든 요청 유형에 대한 요청 매개 변수를 사용하도록 코드를 변경하면 백본이 완벽하게 작동합니다.

은 REST API에 대한 표준 표준입니다. 아니면 그냥 "레일 향이 나는 것"입니까?

+1

나는 이것을 알고 싶습니다. 요청 또는 응답 본문의 형식과 관련하여 RESTful 스타일 API에는 실제 표준이 존재하지 않는다고 생각합니다. REST API를 구축하는 방법에 대해 많이 보았지만 기본적으로이 문제를 간단히 설명합니다. 필자는 요청 된 JSON과 응답 본문을 인코딩 된 형식이 아닌 순수 JSON 형식으로 작성합니다. – Troy

답변

1

PUT, POST, PATCH 등 (GET 및 DELETE를 제외한 모든 항목) 요청 본문을 허용합니다. 일반적으로 데이터로 전달됩니다 중 하나

  • $_POST (또는 이와 유사한 당신의 웹 프레임 워크에 따라에 서버에 의해 디코딩 및 구문 분석 (A URL의 쿼리 문자열과 정확히 일치) 이름/값 쌍의 URL 인코딩 된 문자열 선택). 일반적으로 Content-Type 헤더가 application/x-www-form-urlencoded으로 설정되어 있습니다 (양식 제출시 브라우저에서 기본값으로 사용).file_get_contents('php://input')에 데이터가 표시되고 $_POST이 아닌 경우이 헤더가 없거나 다른 값으로 설정되었을 가능성이 큽니다. Chrome을 사용하는 경우 개발자 도구의 네트워크 탭에서 클라이언트가 보내는 헤더와 본문을 볼 수 있습니다.

  • 다른 일반적인 요청 본문 형식은 Content-Type: application/json을 사용하고 JSON 문자열을 본문에 쓰는 것입니다. 이 주소는 file_get_contents('php://input')을 통해 액세스 한 다음 JSON 파서로 구문 분석 할 수 있습니다.

* DELETE : it's a little unclear whether or not using a request body with DELETE is allowed or a good practice에 대한 참고 사항

+0

API 호출이 공용 URL을 넘는 경우 Runscope를 사용하여 요청/응답/shamless_plug를 검사 할 수도 있습니다. –

+0

application/x-www-form-urlencoded로 설정된 Content-Type 헤더가 있는지 확인하는 것이 좋습니다. 요청 본문 또는 PHP 입력을 읽습니다. 고맙습니다! – xero

+0

프레임 워크가 이미 그렇게하고 있습니다. –