웹 서비스는 네트워크를 통해 컴퓨터 간의 상호 접속을 지원하도록 설계된 소프트웨어 시스템입니다. 웹 애플리케이션에서는 일반적으로 인터넷에서 액세스할 수 있고 원격 시스템 호스트에서 요청된 서비스를 수행할 수 있는 API 세트를 사용합니다. 시스템 호스트에 필요한 서비스입니다. 예를 들어 Flex 기반 클라이언트는 서버 측에서 PHP를 실행하는 웹 애플리케이션을 구현하는 함수를 호출할 수 있습니다. 웹 서비스는 통신 프로토콜 스택의 기본 계층으로 SOAP를 사용합니다.
Yii는 웹 애플리케이션에서 웹 서비스 구현을 단순화하기 위해 CWebService 및 CWebServiceAction을 제공합니다. 이러한 API는 서비스 공급자라는 클래스 형태로 구현됩니다. Yii는 각 클래스에 대해 사용 가능한 API와 클라이언트가 이를 호출할 수 있는 방법을 설명하는 WSDL을 생성합니다. 클라이언트가 API를 호출하면 Yii는 해당 서비스 제공자를 인스턴스화하고 요청된 API를 호출하여 요청을 완료합니다.
참고: CWebService는 PHP SOAP 확장을 사용합니다. 이 섹션의 예제를 시도하기 전에 이 확장을 허용했는지 확인하세요.
위에서 언급했듯이 서비스 제공자는 원격 호출이 가능한 클래스 정의입니다. Yii는 원격으로 호출할 수 있는 메서드와 해당 매개 변수 및 반환 값을 식별하기 위해 문서 주석 및 클래스 리플렉션을 사용합니다.
간편한 주식 시세 서비스부터 시작해 보세요. 이 서비스를 통해 고객은 특정 주식에 대한 견적을 요청할 수 있습니다. 당사는 다음과 같이 서비스 제공자를 결정합니다. CController를 확장하는 공급자 클래스 StockController
를 정의합니다. 이는 필수가 아닙니다. 이 작업이 수행되는 이유는 잠시 후에 설명하겠습니다.
class StockController extends CController { /** * @param string the symbol of the stock * @return float the stock price * @soap */ public function getPrice($symbol) { $prices=array('IBM'=>100, 'GOOGLE'=>350); return isset($prices[$symbol])?$prices[$symbol]:0; //...return stock price for $symbol } }
위에서는 문서의 @soap
태그를 통해 getPrice
메소드를 선언했습니다. 댓글 웹 서비스 API. 입력 매개변수 데이터 유형 및 반환 값을 지정하려면 문서 주석을 참조하세요. 다른 API도 비슷한 방식으로 선언할 수 있습니다.
서비스 제공자를 정의하고 클라이언트를 통해 액세스할 수 있도록 합니다. 특히 이 서비스를 노출하는 컨트롤러 작업을 만들 예정입니다. 이는 컨트롤러 클래스에서 CWebServiceAction 작업을 정의하여 쉽게 수행할 수 있습니다. 예를 들어 StockController
안에 넣습니다.
class StockController extends CController { public function actions() { return array( 'quote'=>array( 'class'=>'CWebServiceAction', ), ); } /** * @param string the symbol of the stock * @return float the stock price * @soap */ public function getPrice($symbol) { //...return stock price for $symbol } }
이것이 우리가 구축해야 할 웹 서비스입니다! 작업 URL http://www.php.cn/
에 액세스하려고 하면 실제로 우리가 정의한 웹 서비스에 대한 WSDL 설명인 많은 XML 콘텐츠를 볼 수 있습니다.
팁: 기본적으로 CWebServiceAction은 현재 컨트롤러가 서비스 공급자라고 가정합니다.
getPrice
에StockController
메서드를 정의했기 때문입니다.
이 예제를 완료하려면 방금 만든 웹 서비스를 사용하는 클라이언트를 만들어 보겠습니다. 예제의 클라이언트는 PHP로 작성되었지만 Java
, C#
, Flex
등 다른 언어로도 작성될 수 있습니다.
$client=new SoapClient('http://hostname/path/to/index.php?r=stock/quote'); echo $client->getPrice('GOOGLE');
위 스크립트를 웹페이지나 콘솔 모드에서 실행하면 GOOGLE
. 350
에 해당;xsd:string
xsd:int
xsd:float
에 해당 xsd:boolean
xsd:date
xsd:time
xsd:dateTime
xsd:string
에 해당 xsd:struct
xsd:anyType
@soap
기본 또는 복합 유형 뒤에
[]
다음은
객체의 배열을 반환하는 예입니다. getPosts
Post
class PostController extends CController { /** * @return Post[] a list of posts * @soap */ public function getPosts() { return Post::model()->findAll(); } } class Post extends CActiveRecord { /** * @var integer post ID * @soap */ public $id; /** * @var string post title * @soap */ public $title; }
5. 클래스 매핑
IWebServiceProvider 인터페이스를 구현하면 서비스 공급자가 원격 메소드 호출을 차단할 수 있습니다. IWebServiceProvider::beforeWebMethod에서 서비스 공급자는 CWebService::methodName을 통해 현재 CWebService 인스턴스와 요청된 메서드 이름을 얻을 수 있습니다. 어떤 이유로(예: 무단 액세스) 원격 메서드를 호출하면 안 되는 경우 false를 반환할 수 있습니다.
위 내용은 Yii Framework 공식 가이드 시리즈 47 - 특별주제: 웹 서비스의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!