tebru/retrofit-php

Retrofit for PHP - 一个类型安全的PHP REST客户端。

v3.3.1 2020-04-02 20:14 UTC

README

Build Status Code Coverage Scrutinizer Code Quality SensioLabsInsight

Retrofit是一个类型安全的REST客户端。它明显是从square/retrofit中抄袭而来,并在PHP中实现。

❗升级通知❗

版本3引入了许多破坏性更改。在升级之前,请查阅升级指南

概述

以下内容适用于版本3,请查看对应标签以获取版本2的文档

Retrofit允许您使用简单的接口定义REST API。以下示例将尝试显示一个典型的用例,但需要两个额外的库。第一个使用Guzzle来发送HTTP请求,因为Retrofit没有提供任何默认的网络请求方式。第二个使用序列化器(Gson)来连接到Retrofit的Converter功能。这允许对请求体和响应体进行自动序列化和反序列化。

interface GitHubService
{
    /**
     * @GET("/users/{user}/list")
     * @Path("user")
     * @ResponseBody("App\GithubService\ListRepo")
     * @ErrorBody("App\GitHubService\ApiError")
     */
    public function listRepos(string $user): Call;
}

使用注解来配置端点。然后,Retrofit类生成服务接口的工作实现。

$retrofit = Retrofit::builder()
    ->setBaseUrl('https://api.github.com')
    ->setHttpClient(new Guzzle6HttpClient(new Client())) // requires a separate library
    ->addConverterFactory(new GsonConverterFactory(Gson::builder()->build())) // requies a separate library
    ->build();
    
$gitHubService = $retrofit->create(GitHubService::class);

我们新创建的服务能够向/users/{user}/list发送GET请求,它返回一个Call对象。

$call = $gitHubService->listRepos('octocat');

然后使用Call对象同步或异步地执行请求,返回响应。

$response = $call->execute();

// or

$call->enqueue(
    function(Response $response) { }, // response callback (optional)
    function(Throwable $throwable) { } // error callback (optional)
);
$call->wait();

然后您可以检查请求是否成功,并获取反序列化的响应体。

if (!$response->isSuccessful()) {
    throw new ApiException($response->errorBody());
}

$responseBody = $response->body();

使用示例来自Square的文档

安装与使用

Retrofit 3需要PHP 7.1

composer require tebru/retrofit-php

请确保您还安装了一个HTTP客户端。

composer require tebru/retrofit-php-http-guzzle6

安装一个转换器来处理更高级的请求和响应体转换。

composer require tebru/retrofit-php-converter-gson

文档

许可

本项目采用MIT许可。请参阅LICENSE文件以获取更多信息。