tebru/retrofit-bundle

为 retrofit-php 库提供的 Symfony2 扩展包。

v2.1.0 2016-08-17 17:27 UTC

README

这个 Symfony2 扩展包旨在提供一个简单的方式来使用 tebru/retrofit-php 库。请查看功能相关的文档

安装

composer require tebru/retrofit-bundle

由于 Retrofit 不包含 http 客户端,需要安装 Guzzle。

composer require guzzlehttp/guzzle

在 AppKernel.php 中添加一行

new Tebru\RetrofitBundle\TebruRetrofitBundle()

用法

您需要为每个想要使用的 API 创建提供者。它们应该使用构建器创建并返回一个 RestAdapter。以下是一个示例

<?php

namespace AppBundle;

use Tebru\Retrofit\Adapter\Rest\RestAdapter;

class FooBarRestAdapterProvider
{
    public static function get($baseUrl)
    {
        // setup additional dependencies like an http client here and use
        // the setters to add them to the builder
        
        // build the rest adapter
        return RestAdapter::builder()
            ->setBaseUrl($baseUrl)
            ->build();
    }
}

创建注解接口。以下是一个简单示例,更详细的示例可以在这里找到。

<?php

namespace AppBundle;

use Tebru\Retrofit\Annotation as Rest;

interface Foo
{
    /**
     * @Rest\GET("/get/{id}")
     */
    public function getFoo($id);
}

其他所有配置都可以在服务定义中进行。以下是一个 yaml 示例。

parameters:
    foo.class: AppBundle\Foo
    bar.class: AppBundle\Bar
    
services:
    # create a rest adapter
    foobar_rest_adapter:
        class: %tebru_retrofit.rest_adapter.class%
        factory: [AppBundle\FooBarRestAdapterProvider, get]
        arguments:
             - "https://foobar.com"
        
    # use the rest adapter to create clients
    # clients must be tagged with 'tebru_retrofit.register'
    foo_service:
        class: %foo.class%
        factory: [@foobar_rest_adapter, create]
        arguments: [%foo.class%]
        tags:
            - { name: tebru_retrofit.register }
            
    bar_service:
        class: %bar.class%
        factory: [@foobar_rest_adapter, create]
        arguments: [%bar.class%]
        tags:
            - { name: tebru_retrofit.register }

    # inject your client services anywhere
    baz:
        class: AppBundle\Baz
        arguments: [@foo_service, @bar_service]

模拟

由于 Retrofit 使用接口,因此如果您不想访问真实 API,可以轻松创建模拟实现。

services:
    foo_service:
        class: %foo.class%
        factory: [@foobar_rest_adapter, create]
        arguments: ['AppBundle\MockFoo']
        tags:
            - { name: tebru_retrofit.register }
services:
    foo_service:
        class: %foo.class%
        factory: [@foobar_rest_adapter, create]
        arguments: [@mock_foo]
        tags:
            - { name: tebru_retrofit.register }

注意上述示例中的 arguments 键。您可以将具体类作为字符串或服务传递,以使用它而不是生成的类。这在开发期间特别有用。