talentrydev/retrofit-php

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

v3.2.3 2024-07-12 12:40 UTC

This package is auto-updated.

Last update: 2024-09-12 12:59:01 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的转换功能。这允许自动序列化请求体和反序列化响应体。

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文件以获取更多信息。