PHP 편안하고
REST (영어 : 인 Representational 주 전송, REST라는)는 건축 제한과 원칙의 집합을 의미한다.
REST 스타일의 웹 API 디자인은 편안하고 API라고합니다. 이것은 다음의 세 가지 자원에서 정의된다 :
- 직관적 인 간단한 주소 자원 : URI, 예를 들면 :
http://example.com/resources/
. - 전송 자원 : 웹 서비스와 같은 인터넷 매체 유형의 반환 받아 들인다 : JSON, XML을, YAM 좋아.
- 자원의 운영 지원되는 자원에 대한 요청의 일련의 웹 서비스 방법 (예 : POST, GET, PUT 또는 DELETE).
우리는 RESTful 웹 서비스를 만들기 위해 PHP (더 프레임) 사용이 튜토리얼은이 섹션의 코드를 사용하여 문서의 끝 부분에 다운로드 할 수 있습니다.
이 자습서에서는 다음을 배우게됩니다 :
- 편안한 Webservice를 만들기.
- 네이티브 PHP를 사용하여, 어떤 프레임 워크에 의존하지 않는다.
- 규칙을 준수하는 URI 패턴을 REST.
- RESTful 서비스는 허용하고 형식 등 JSON, XML을 반환 할 수있다.
- 상황에 따라 반응에 대응하는 HTTP 상태 코드.
- 데모 요청 헤더.
- RESTful 웹 서비스를 테스트하기 위해 REST 클라이언트를 사용합니다.
편안하고 Webservice를 예를 들면
다음 코드는 RESTful 서비스 클래스 Site.php입니다 :
예
/ *
*이 튜토리얼은 편안하고의 예를 보여줍니다
* RESTful 서비스 클래스
* /
클래스 사이트 {
개인 $ 사이트 = 배열 (
1 => 'Taobao의'
2 => '구글'
3 => 'w3big'
4 => '바이두'
5 => '웨이 보',
6 => '시나'
);
공공 기능 getAllSite () {
;> 사이트 - $이를 반환
}
공공 기능 getSite ($ 아이디) {
$ 사이트 = 배열 ($ 아이디 = > ($이 -> 사이트 [$ 아이디]) $이 -> 사이트 [$ 아이디] :? $이 -> 사이트 [1]);
$ 사이트를 반환;
}
}
?>
편안하고 서비스 URI 매핑
RESTful 한 서비스 URI는 간단한 시각적 자원의 주소로 설정해야합니다. htaccess로 아파치 서버는 다시 쓰기 규칙을 해당 설정해야합니다.
이 예는 우리가이 URI 규칙을 사용합니다 :
1, 모든 사이트의 목록을 얻을 수 :
http://localhost/restexample/site/list/
2, 특정 사이트의 ID를 사용하여, 다음 URI는 3 사이트의 ID를 얻을 수 :
http://localhost/restexample/site/list/3/
다음과 같이 프로젝트의htaccess로 파일 구성 규칙은 다음과 같습니다 :
# 开启 rewrite 功能 Options +FollowSymlinks RewriteEngine on # 重写规则 RewriteRule ^site/list/$ RestController.php?view=all [nc,qsa] RewriteRule ^site/list/([0-9]+)/$ RestController.php?view=single&id=$1 [nc,qsa]
RESTful 웹 서비스 컨트롤러
htaccess로 파일에서, 우리는 RestController.php는 다른 방법으로 배포하는 '보기'다른 매개 변수를 공격자의 매개 변수 '보기'를 설정하여 해당 요청을 파일을 얻을 수 있습니다.다음과 같이 RestController.php 파일의 코드는 다음과 같습니다
예
require_once를 ( "SiteRestHandler.php");
$보기 = "";
(에는 isset ($ _GET & # 경우 , "보기"& # 93; 91))
$보기 = $ _GET & # 91 ; "보기"& # 93;
/ *
* RESTful 서비스 컨트롤러
* URL 매핑
* /
스위치 ($보기) {
경우 "모든"
// 처리 REST URL / 사이트 / 목록 /
$ siteRestHandler = 새로운 SiteRestHandler ();
$ siteRestHandler -> getAllSites ();
휴식;
경우 "하나"
// REST URL / 사이트 / 쇼 / <핸들 ID를> /
$ siteRestHandler = 새로운 SiteRestHandler ();
$ siteRestHandler -> getSite ($ _GET [ "아이디"]);
휴식;
경우 ""
// 404 - 찾을 수 없습니다;
휴식;
}
?>
간단한 편안하고 기반 클래스
다음 다음은 HTTP 상태 코드의 요구에 따라 처리하여 RESTful 기본 클래스를 제공 SimpleRest.php 파일 코드 :
예
/ *
* 간단한 RESTful 웹 서비스의 기본 클래스
* 우리는 수요에 따라이 클래스를 확장 할 수 있습니다
* /
클래스 SimpleRest {
개인 $ httpVersion = "HTTP / 1.1 ";
공공 기능 setHttpHeaders ($ contentType을, $ 에 statusCode) {
$ statusMessage = $이 -> getHttpStatusMessage ($에 statusCode);
헤더 ($이 -> httpVersion " "$에 statusCode .. ""$ statusMessage ..);
헤더 ( "콘텐츠 유형 :" $의 contentType이.)
}
공공 기능 getHttpStatusMessage ($에 statusCode) {
$ httpStatus = 배열 (
100 => '계속'
101 => '전환 프로토콜'
200 => 'OK'
201 => '생성',
202 => '허용'
203 => '비 권위있는 정보 ',
204 => '콘텐츠 없음',
205 => '콘텐츠 재설정'
206 => '일부 콘텐츠',
300 => '다중 선택'
301 => '영구 이동'
302 => '발견'
303 => '다른보기'
304 => '수정되지 않음',
305 => '프록시 사용'
306 => '(미사용)' ,
307 => '임시 리디렉션'
400 => '잘못된 요청'
401 => '무단'
402 => '지불 필수'
403 => '금지'
404 => '찾을 수 없음',
405 => '방법은 허용되지 않음' ,
406 => '불가'
407 => '프록시 인증 필요' ,
408 => '요청 시간 초과'
409 => '충돌'
410 => '사라',
411 => '길이 필수'
412 => '전제 조건 실패'
413 => '요청 엔티티가 너무 큼 '
414 => '요청 - URI 너무 긴'
415 => '지원되지 않는 미디어 유형' ,
416 => '요청 범위하지 만족할 '
417 => '기대 실패'
500 => '내부 서버 오류' ,
501 => '구현되지 않음',
502 => '잘못된 게이트웨이',
503 => '서비스를 사용할 수 없음',
504 => '게이트웨이 시간 초과'
505 => 'HTTP 버전이 지원되지 않음 ');
수익 ($ httpStatus [$에 statusCode] ) $ httpStatus [$에 statusCode] : $ 상태 [500];?
}
}
?>
RESTful 웹 서비스 처리 클래스
다음은 RESTful 웹 서비스 핸들러 클래스 SiteRestHandler.php, 우리는 RESTful 한 기본 클래스를 제공하는 위의 클래스가 리턴 HTTP 상태 코드 및 데이터 포맷, 우리는 세 개의 데이터 포맷의 예를 제공하는 경우를 결정하기위한 요청의 파라미터에 의해 결정된다 상속 : "응용 프로그램 / JSON", "응용 프로그램 / XML을"또는 "text / html과"
다음과 같이 SiteRestHandler.php 파일의 코드는 다음과 같습니다
예
require_once를 ( "SimpleRest.php");
require_once를 ( "Site.php");
클래스 SiteRestHandler는 SimpleRest를 {확장
getAllSites 함수 () {
$ 사이트 = 새로운 사이트 ();
$ RAWDATA = $ 사이트 -> getAllSite ();
경우 (빈 ($ RAWDATA)) {
$에 statusCode = 404;
$ RAWDATA = 배열 ( '오류' => '찾을 수 없습니다 사이트!');
} 그밖에 {
$에 statusCode = 200;
}
$ requestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
> setHttpHeaders ($ requestContentType -이 $ ;, $에 statusCode를)
경우 (strpos ($ requestContentType, ' 응용 프로그램 / JSON')! == false)를 {
$ 반응 = $이 -> encodeJson ($ RAWDATA);
$ 응답을 에코;
} 그렇지 경우 (strpos ($ requestContentType , 'text / html과')! == 거짓) {
$ 반응 = $이 -> encodeHtml ($ RAWDATA);
$ 응답을 에코;
} 그렇지 않은 경우 (strpos ($ requestContentType 경우 , '응용 프로그램 / XML')! == 거짓) {
$ 반응 = $이 -> encodeXml ($ RAWDATA);
$ 응답을 에코;
}
}
공공 기능 encodeHtml ($ 드 responseData) {
$ htmlResponse = "<표 테두리 = '1'>";
foreach는 ($로 $ 드 responseData 키 = > $ 값) {
.. $ htmlResponse = "<TR > <TD>"$ 키 "</ TD> <TD>"$ 값 "</ TD> </ TR>"...;
}
. $ htmlResponse = "</ 테이블 >";
$ htmlResponse를 반환;
}
공공 기능 encodeJson ($ 드 responseData) {
$ jsonResponse =하여 json_encode ($ 드 responseData) ;
반환 $ jsonResponse;
}
공공 기능 encodeXml ($ 드 responseData) {
// 객체 SimpleXMLElement 만들기
$의 XML = 새로운 SimpleXMLElement ( '< 현장> </ 사이트> <XML 버전 = "1.0"?>');
foreach는 ($로 $ 드 responseData 키 = > $ 값) {
$의 XML ->의 addChild ($ 키 , $ 값);
}
반환 $의 XML -> asXML () ;
}
공공 기능 getSite ($ 아이디) {
$ 사이트 = 새로운 사이트 ();
$ RAWDATA = $ 사이트 -> getSite ($ 아이디);
경우 (빈 ($ RAWDATA)) {
$에 statusCode = 404;
$ RAWDATA = 배열 ( '오류' => '찾을 수 없습니다 사이트!');
} 그밖에 {
$에 statusCode = 200;
}
$ requestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
> setHttpHeaders ($ requestContentType -이 $ ;, $에 statusCode를)
경우 (strpos ($ requestContentType, ' 응용 프로그램 / JSON')! == false)를 {
$ 반응 = $이 -> encodeJson ($ RAWDATA);
$ 응답을 에코;
} 그렇지 경우 (strpos ($ requestContentType , 'text / html과')! == 거짓) {
$ 반응 = $이 -> encodeHtml ($ RAWDATA);
$ 응답을 에코;
} 그렇지 않은 경우 (strpos ($ requestContentType 경우 , '응용 프로그램 / XML')! == 거짓) {
$ 반응 = $이 -> encodeXml ($ RAWDATA);
$ 응답을 에코;
}
}
}
?>
다음으로 HTTP를 통해 다음과 같이 // localhost를 / restexample / 사이트 / 목록 / 방문, 출력 결과는 다음과 같습니다
RESTful 웹 서비스 클라이언트
그 다음 우리는 우리의 서비스를 요청하기 위해 구글 크롬 브라우저의 "고급 나머지 클라이언트"로 RESTful 웹 서비스 클라이언트를 사용할 수 있습니다.
요청 HTTP의 예 : // localhost를 / restexample / 사이트 / 목록 / 주소, 수신 된 데이터를수락하는 유사 응용 프로그램 / JSON
// 로컬 호스트 / restexample / 사이트 / 목록 / 3 / 3 요청 ID 사이트 w3big (튜토리얼), 액세스 주소는 HTTP입니다
자료 다운로드
이 예에서 사용한 코드를 다운로드하려면 아래 버튼을 클릭합니다 :