PHP RESTful
REST(영어: Representational State Transfer, REST라고도 함)는 일련의 아키텍처 제약 조건과 원칙을 의미합니다.
REST 디자인 스타일을 따르는 웹 API를 RESTful API라고 합니다. 이는 리소스의 다음 세 가지 측면에서 정의됩니다.
직관적이고 짧은 리소스 주소: URI(예:
http://example.com/resources/
).전송된 리소스: JSON, XML, YAM 등과 같이 웹 서비스에서 허용하고 반환하는 인터넷 미디어 유형입니다.
리소스에 대한 작업: 이 리소스에 대한 웹 서비스에서 지원하는 일련의 요청 방법(예: POST, GET, PUT 또는 DELETE).
이 튜토리얼에서는 PHP(프레임워크 없이)를 사용하여 RESTful 웹 서비스를 만듭니다. 이 기사의 마지막 부분에서 이 장에 사용된 코드를 다운로드할 수 있습니다.
이 튜토리얼을 통해 다음 내용을 배울 수 있습니다.
RESTful 웹 서비스를 만듭니다.
기본 PHP를 사용하며 프레임워크에 의존하지 않습니다.
URI 패턴은 REST 규칙을 따라야 합니다.
RESTful 서비스는 JSON, XML 등의 형식을 허용하고 반환합니다.
상황에 따라 해당 HTTP 상태 코드에 응답합니다.
요청 헤더 사용을 시연합니다.
REST 클라이언트를 사용하여 RESTful 웹 서비스를 테스트하세요.
RESTful Webservice 인스턴스
다음 코드는 RESTful 서비스 클래스 Site.php:
입니다.Instance
/*
* php 중국어 웹사이트 RESTful 데모 예시
* RESTful 서비스 클래스
*/
Class Site {
private $ 사이트 = 배열(
배열( , 3 => ' php'
, ~ ~ . ->사이트; }
공개 함수 getSite($id){
$site = array($id =>( $this->sites [$id]) ? $this->sites[$id] : $this-> 사이트[ 1]);
반품 $site;
}
}
?>
RESTful 서비스 URI 매핑
RESTful 서비스 URI는 직관적이고 짧은 리소스 주소로 설정되어야 합니다. Apache 서버의 .htaccess에는 해당 재작성 규칙 세트가 있어야 합니다.
이 예에서는 두 가지 URI 규칙을 사용합니다.
1. 모든 사이트 목록 가져오기:
http://localhost/restexample/site/list/
2 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= [nc,qsa]
RESTful Web Service Controller
.htaccess 파일에서 '' 매개변수를 설정하여 RestController.php 파일에서 해당 요청을 받습니다. view', 그리고 'view'를 얻습니다. 다양한 매개변수가 다양한 메서드에 배포됩니다. RestController.php 파일 코드는 다음과 같습니다.
Instance
require_once("SiteRestHandler.php")
""
;if(isset( $_GET& #91; "view"]))
$view = $_GET
["view"];/* * RESTful 서비스 컨트롤러 * URL 매핑 */switch(
$view
){
케이스 "all":/ / 프로세스 REST Url /site/list/
~
(); 휴식; 케이스 "single"
:
//REST URL 처리 /site/show/<id>/ $siteRestHandler->getSite($_GET["id"]);
break;
케이스 "" :
// 404 - 찾을 수 없음;
break;
}
?>
Simple RESTful 기본 클래스
다음은 요청에 대한 응답으로 HTTP 상태 코드를 처리하기 위한 RESTful 기본 클래스인 SimpleRest.php파일 코드는 다음과 같습니다.
”"HTTP/1.1";
공개 함수
setHttpHeaders($contentType,
$statusCode ){){ = $this
-> getHttpStatusMessage($statusCode) ($this
->
httpVersion. " " . $상태 코드 ." ".
$statusMessage
)("콘텐츠 유형:". $contentType ); } 공개 기능 getHttpStatusMessage( $상태코드){ $httpStatus = array(
100 => '계속',
101 => '프로토콜 전환',
200 => '확인',
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 => 'Gone',
411 => '길이 필수',
412 => '전제조건 실패',
413 => '요청 항목이 너무 큼',
414 => '요청-URI가 너무 길다',
415 => '지원되지 않는 미디어 유형',
416 => '요청한 범위가 만족스럽지 않음',
417 => '기대 실패',
500 => '내부 서버 오류',
501 => '구현되지 않음',
502 => '나쁜 게이트웨이',
503 => '서비스를 사용할 수 없음',
504 => '게이트웨이 시간 초과',
505 => '지원되지 않는 HTTP 버전');
반환 ($httpStatus[$statusCode]) ? $httpStatus[$statusCode] : $status[500];
}
}
?>
RESTful 웹 서비스 처리 클래스
다음은 위에서 제공한 RESTful 기본 클래스를 상속하는 RESTful 웹 서비스 처리 클래스인 SiteRestHandler.php입니다. 이 클래스는 요청 매개변수를 판단하여 반환되는 HTTP 상태 코드와 데이터 형식을 결정합니다. 예 "application/json", "application/xml" 또는 "text/html"의 세 가지 데이터 형식을 제공합니다.
SiteRestHandler.php 파일 코드는 다음과 같습니다.
实例
require_once("SimpleRest.php");
require_once("Site.php");
class SiteRestHandler 확장 SimpleRest {
기능 getAllSites() {
$site = new Site ();
$rawData = $site- >getAllSite();
if(empty($rawData)) {
$statusCode = 404 ;
$rawData = 배열( '오류' => '사이트를 찾을 수 없습니다!'); ㅋㅋㅋ
= $_SERVER['HTTP_ACCEPT'];
$this ->setHttpHeaders($requestContentType, $statusCode);
if(strpos($requestContentType,' application/json') !== false){
$response = $this->encodeJson( $rawData);
에코 $response;
} else if(strpos($requestContentType,'text/html') !== fal se){
$응답 = $this->encodeHtml($rawData);
에코 $response;
} else if(strpos($requestContentType ,'application/xml') !== false){
$응답 = $this->encodeXml($rawData);
에코 $응답 ;
}
}
공개 함수 encodeHtml ($responseData) {
$htmlResponse = "<table border='1'>";
foreach ($responseData as $ key=>$value) {
$html응답 .= "<tr><td>". $키. "</td><td>". $값. "</td></tr>";
}
$htmlResponse .= "</table>";
반환 $htmlResponse;
}
공개 함수 encodeJson($responseData) {
$jsonResponse = json_encode($responseData );
반품 $jsonResponse;
}
공용 함수 encodeXml($responseData) {
// 创建 SimpleXMLElement 对象
$xml = 새로운 SimpleXMLElement('<?xml version="1.0"?><site></site>');
foreach($responseData as $key=>$value) {
$xml->addChild($key, $value);
}
반환 $xml ->asXML() ;
}
공개 기능 getSite($id) {
$site = new Site();
$rawData = $site->getSite($id);
if(empty($rawData)) {
$statusCode = 404;
$rawData = array('error' => 'No sites found!');
} else {
$statusCode = 200;
}
$requestContentType = $_SERVER['HTTP_ACCEPT'];
$this ->setHttpHeaders($requestContentType, $statusCode);
if(strpos($requestContentType,' application/json') !== false){
$response = $this->encodeJson( $rawData);
에코 $response;
} else if(strpos($requestContentType,'text/html') !== fal se){
$응답 = $this->encodeHtml($rawData);
에코 $response;
} else if(strpos($requestContentType ,'application/xml') !== false){
$response = $this->encodeXml($rawData);
echo $response;
}
}
}
?>
예제에서는 http://localhost/restexample/site/list/ 주소가 요청되었으며 수신된 데이터는
Accept: application/json사이트 요청 php(php 중국어 웹사이트) ) ID 3, 접속 주소 http://localhost/restexample/site/list/3/의 경우
소스 코드 다운로드
다음 버튼을 클릭하면 예제에 사용된 코드를 다운로드할 수 있습니다.
소스코드 다운로드