torann/api-client

A reusable base API client for use with remote services.

Maintainers

👁 torann

Package info

github.com/Torann/api-client

pkg:composer/torann/api-client

Statistics

Installs: 759

Dependents: 0

Suggesters: 0

Stars: 4

Open Issues: 0

0.2.1 2017-05-16 20:14 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

BSD 2-Clause db5b29f47b306879292a4420558279a9a98a282c

  • Daniel Stainback <daniel.woop@lyften.com>

curlapilaravelapi clientbase64 image

This package is auto-updated.

Last update: 2026-06-08 13:56:37 UTC


README

👁 Latest Stable Version
👁 Total Downloads
👁 Patreon donate button
👁 Donate weekly to this project using Gratipay
👁 Donate to this project using Flattr
👁 Donate to this project using Paypal

A reusable base API client for use with remote services.

Installation

Install using composer:

$ composer require torann/api-client

Creating Clients

Once installed we need to create some clients. First we need to extend the \BaseApiClient\Client class and set endpoint namespace.

Client

<?php

namespace App\BlogApi;

class Client extends \BaseApiClient\Client
{
 /**
 * Namespace for the endpoints
 *
 * @var string
 */
 protected $endpointNamespace = 'App\BlogApi\Endpoints';
}

The $endpointNamespace variable is the prefix for the namespace of our endpoints.

Endpoints

From the endpoint we make our API calls and return the models.

<?php

namespace App\BlogApi\Endpoints;

use App\BlogApi\Models\Post;

use BaseApiClient\Endpoint;
use BaseApiClient\Models\Collection;

class Posts extends Endpoint
{
 /**
 * Get pages for the provided website.
 *
 * @param array $params
 *
 * @return Collection
 * @throws \BaseApiClient\Exceptions\ApiException
 */
 public function index(array $params = [])
 {
 $response = $this->request->get('posts', $params);

 return new Collection($response, 'Post');
 }

 /**
 * Create a new post.
 *
 * @param array $params
 *
 * @return Post
 * @throws \BaseApiClient\Exceptions\ApiException
 */
 public function create(array $params)
 {
 $response = $this->request->post('posts', $params);

 return new Post($response);
 }

 /**
 * Delete the provided post.
 *
 * @param string $id
 *
 * @return bool
 * @throws \BaseApiClient\Exceptions\ApiException
 */
 public function delete($id)
 {
 $response = $this->request->delete(sprintf('posts/%s', $id));

 return $response->getResponseCode() === 200;
 }
}

Models

<?php

namespace App\BlogApi\Models;

use BaseApiClient\Models\Model;

class Post extends Model
{
 /**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
 protected $dates = [
 'publish_at',
 ];
}

Registering Our Clients

<?php

namespace App\Providers;

use App\BlogApi\Client;
use App\AnotherApi\Client;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
 /**
 * Bootstrap any application services.
 *
 * @return void
 */
 public function boot()
 {
 //
 }

 /**
 * Register any application services.
 *
 * @return void
 */
 public function register()
 {
 $this->registerBlogService();
 $this->registerAnotherService();
 }

 /**
 * Register blog manager services.
 *
 * @return void
 */
 public function registerBlogService()
 {
 $this->app->bind(Client::class, function () {
 return new Client([
 'domain' => 'http://some.fancy.ip/',
 'secret' => env('BLOG_MANAGER_API_SECRET'),
 ]);
 });
 }

 /**
 * Register blog manager services.
 *
 * @return void
 */
 public function registerAnotherService()
 {
 $this->app->bind(Client::class, function () {
 return new Client([
 'domain' => 'http://some.fancy.ip/',
 'secret' => env('ANOTHER_API_SECRET'),
 ]);
 });
 }
}

Calling an Endpoint

Below is an example of using our \App\BlogApi\Client inside of a controller.

<?php

namespace App\Http\Controllers;

use App\BlogApi\Client;
use Illuminate\Http\Request;

class BlogController extends Controller
{
 /**
 * Blog manager client instance.
 *
 * @var \App\BlogApi\Client
 */
 protected $client;

 /**
 * Initializer constructor.
 *
 * @param Client $client
 */
 public function __construct(Client $client)
 {
 parent::__construct();

 $this->client = $client;
 }

 /**
 * Display the specified resource.
 *
 * @param \Illuminate\Http\Request $request
 *
 * @return \Illuminate\Http\Response
 */
 public function index(Request $request)
 {
 $posts = $this->client->posts->index($request->only('page'));

 return view('posts.index')->with([
 'posts' => $posts->paginate()
 ]);
 }

 /**
 * Display the specified resource.
 *
 * @param Request $request
 * @param string $slug
 *
 * @return \Illuminate\Http\Response
 */
 public function show(Request $request, $slug)
 {
 $post = $this->client->posts->find($slug);

 return view('posts.show')->with([
 'post' => $post
 ]);
 }
}

Change Log

0.2.0

  • Add support for Laravel 5.4

0.1.4

  • Return null for empty values

0.1.3

  • Add support for Laravel 5.3

0.1.2

  • Remove trailing slash

0.1.1

  • Bug fixes

0.1.0

  • First release