>  기사  >  백엔드 개발  >  Yii 프레임워크 공식 가이드 시리즈 47 - 특별 주제: 웹 서비스

Yii 프레임워크 공식 가이드 시리즈 47 - 특별 주제: 웹 서비스

黄舟
黄舟원래의
2017-02-16 09:40:361566검색



웹 서비스는 네트워크를 통해 컴퓨터 간의 상호 접속을 지원하도록 설계된 소프트웨어 시스템입니다. 웹 애플리케이션에서는 일반적으로 인터넷에서 액세스할 수 있고 원격 시스템 호스트에서 요청된 서비스를 수행할 수 있는 API 세트를 사용합니다. 시스템 호스트에 필요한 서비스입니다. 예를 들어 Flex 기반 클라이언트는 서버 측에서 PHP를 실행하는 웹 애플리케이션을 구현하는 함수를 호출할 수 있습니다. 웹 서비스는 통신 프로토콜 스택의 기본 계층으로 SOAP를 사용합니다.

Yii는 웹 애플리케이션에서 웹 서비스 구현을 단순화하기 위해 CWebService 및 CWebServiceAction을 제공합니다. 이러한 API는 서비스 공급자라는 클래스 형태로 구현됩니다. Yii는 각 클래스에 대해 사용 가능한 API와 클라이언트가 이를 호출할 수 있는 방법을 설명하는 WSDL을 생성합니다. 클라이언트가 API를 호출하면 Yii는 해당 서비스 제공자를 인스턴스화하고 요청된 API를 호출하여 요청을 완료합니다.

참고: CWebService는 PHP SOAP 확장을 사용합니다. 이 섹션의 예제를 시도하기 전에 이 확장을 허용했는지 확인하세요.

1. 서비스 제공자 정의(Definition Service Provider)

위에서 언급했듯이 서비스 제공자는 원격 호출이 가능한 클래스 정의입니다. 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도 비슷한 방식으로 선언할 수 있습니다.

2. 웹 서비스 액션 선언(웹 서비스 액션 정의)

서비스 제공자를 정의하고 클라이언트를 통해 액세스할 수 있도록 합니다. 특히 이 서비스를 노출하는 컨트롤러 작업을 만들 예정입니다. 이는 컨트롤러 클래스에서 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은 현재 컨트롤러가 서비스 공급자라고 가정합니다. getPriceStockController 메서드를 정의했기 때문입니다.

3. 웹 서비스 사용

이 예제를 완료하려면 방금 만든 웹 서비스를 사용하는 클라이언트를 만들어 보겠습니다. 예제의 클라이언트는 PHP로 작성되었지만 Java, C#, Flex 등 다른 언어로도 작성될 수 있습니다.


$client=new SoapClient('http://hostname/path/to/index.php?r=stock/quote');
echo $client->getPrice('GOOGLE');

위 스크립트를 웹페이지나 콘솔 모드에서 실행하면 GOOGLE. 350

4. 데이터 유형

정의된 메소드 및 속성에 원격으로 액세스하는 경우 입력 및 출력 매개변수의 데이터 유형을 지정해야 합니다. 다음 기본 데이터 유형을 사용할 수 있습니다.

  • str/string:

    에 해당;xsd:string

  • int/integer: ;

    xsd:int

  • float/double:
  • ;

    xsd:float

  • bool/boolean:
  • ;

    에 해당 xsd:boolean

  • 날짜:
  • 에 해당;

    xsd:date

  • 시간:
  • ;

    xsd:time

  • 날짜/시간에 해당 :
  • ;

    xsd:dateTime

  • 에 해당 배열:
  • ;

    xsd:string

  • 에 해당:
  • ;

    에 해당 xsd:struct

  • mixed :
  • 에 해당합니다.

    xsd:anyType

  • 위의 기본타입 중 어느 하나에도 속하지 않는 타입은 구성된 속성으로 간주합니다. 복합형이다. 복합 유형은 클래스로 간주되며 해당 속성은 클래스의 공개 멤버 변수로 간주되며 문서 주석에
로 표시됩니다.

@soap기본 또는 복합 유형 뒤에

를 추가하여 배열 유형을 사용할 수도 있습니다. 이는 지정된 유형의 배열을 정의합니다.

[]다음은

웹 API를 정의하고

객체의 배열을 반환하는 예입니다. getPostsPost


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. 클래스 매핑

클라이언트에서 복합 매개변수를 얻으려면 애플리케이션이 WSDL 유형에서 해당 PHP 클래스로의 매핑을 정의해야 합니다. 이는 CWebServiceAction의 classMap 속성을 구성하여 수행됩니다.


아아앙

6. 원격 메소드 호출 차단(원격 메소드 호출 차단)

IWebServiceProvider 인터페이스를 구현하면 서비스 공급자가 원격 메소드 호출을 차단할 수 있습니다. IWebServiceProvider::beforeWebMethod에서 서비스 공급자는 CWebService::methodName을 통해 현재 CWebService 인스턴스와 요청된 메서드 이름을 얻을 수 있습니다. 어떤 이유로(예: 무단 액세스) 원격 메서드를 호출하면 안 되는 경우 false를 반환할 수 있습니다.

위 내용은 Yii Framework 공식 가이드 시리즈 47 - 특별주제: 웹 서비스의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.