Description
This library aims to ease creation of REST clients. It is blatantly stolen from square/retrofit and implemented in PHP.
Retrofit alternatives and similar libraries
Based on the "HTTP" category.
Alternatively, view Retrofit alternatives based on common mentions on social networks and blogs.
-
Requests
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries. -
HTTPFul
A Chainable, REST Friendly, PHP HTTP Client. A sane alternative to cURL. -
PHP VCR
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. -
guzzler
Supercharge your app or SDK with a testing library specifically for Guzzle
Tired of breaking your main and manually rebasing outdated pull requests?
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Retrofit or a related project?
README
Retrofit PHP
Retrofit is a type-safe REST client. It is blatantly stolen from square/retrofit and implemented in PHP.
❗UPGRADE NOTICE❗
Version 3 introduces many breaking changes. Please review the [upgrade guide](docs/upgrade_2_3.md) before upgrading.
Overview
The following is for version 3, please check out the corresponding tag for version 2 documentation
Retrofit allows you to define your REST API with a simple interface. The follow example will attempt to display a typical use-case, but requires two additional libraries. The first uses Guzzle to make http requests as Retrofit does not ship with any default way to make network requests. The second uses a serializer (Gson) to hook into Retrofit's Converter functionality. This allows for automatic serialization of request bodies and deserialization of response bodies.
interface GitHubService
{
/**
* @GET("/users/{user}/list")
* @Path("user")
* @ResponseBody("App\GithubService\ListRepo")
* @ErrorBody("App\GitHubService\ApiError")
*/
public function listRepos(string $user): Call;
}
Annotations are used to configure the endpoint.
Then, the Retrofit
class generates a working implementation of the
service interface.
$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);
Our newly created service is capable of making GET requests to
/users/{user}/list, which returns a Call
object.
$call = $gitHubService->listRepos('octocat');
The Call
object is then used to execute the request synchronously
or asynchronously, returning a response.
$response = $call->execute();
// or
$call->enqueue(
function(Response $response) { }, // response callback (optional)
function(Throwable $throwable) { } // error callback (optional)
);
$call->wait();
You can then check to see if the request was successful and get the deserialized response body.
if (!$response->isSuccessful()) {
throw new ApiException($response->errorBody());
}
$responseBody = $response->body();
Usage examples are referenced from Square's documentation
Installation & Usage
Retrofit 3 requires PHP 7.1
composer require tebru/retrofit-php
Please make sure you also install an http client.
composer require tebru/retrofit-php-http-guzzle6
Install a converter to handle more advanced request and response body conversions.
composer require tebru/retrofit-php-converter-gson
Documentation
- [Installation](docs/installation.md)
- [Getting Started](docs/usage.md)
- [Advanced Usage](docs/advanced_usage.md)
- [Annotation Reference](docs/annotations.md)
License
This project is licensed under the MIT license. Please see the LICENSE
file
for more information.
*Note that all licence references and agreements mentioned in the Retrofit README section above
are relevant to that project's source code only.