1. Go to this page and download the library: Download appkr/api library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
appkr / api example snippets
// app/Http/routes.php OR routes/web.php OR routes/api.php
Route::group(['prefix' => 'v1'], function () {
Route::resource(
'books',
'BooksController',
['except' => ['create', 'edit']]
);
});
// app/Http/Controllers/BooksController.php
namespace App\Http\Controllers\V1;
use App\Http\Controllers\Controller;
use App\Book;
use App\Transformers\BookTransformer;
use Illuminate\Http\Request;
class BooksController extends Controller
{
public function index()
{
return json()->withPagination(
Book::latest()->paginate(5),
new BookTransformer
);
}
public function store(Request $request)
{
// Assumes that validation is done at somewhere else
return json()->created(
$request->user()->create($request->all())
);
}
public function show($id)
{
return json()->withItem(
Book::findOrFail($id),
new BookTransformer
);
}
public function update(Request $request, $id)
{
$book = Book::findOrFail($id);
return ($book->update($request->all()))
? json()->success('Updated')
: json()->error('Failed to update');
}
public function destroy($id)
{
$book = Book::findOrFail($id);
return ($book->delete())
? json()->success('Deleted')
: json()->error('Failed to delete');
}
}
// app/Transformers/BookTransformer.php
namespace App\Transformers;
use App\Book;
use Appkr\Api\TransformerAbstract;
use League\Fractal;
use League\Fractal\ParamBag;
class BookTransformer extends TransformerAbstract
{
/**
* List of resources possible to {
$payload = [
'id' => (int) $book->id,
// ...
'created' => $book->created_at->toIso8601String(),
'link' => [
'rel' => 'self',
'href' => route('api.v1.books.show', $book->id),
],
];
return $this->buildPayload($payload);
}
/**
* Include author.
* This method is used, when an API client request /v1/books?ormer = new \App\Transformers\CommentTransformer($params);
$comments = $book->comments()
->limit($transformer->getLimit())
->offset($transformer->getOffset())
->orderBy($transformer->getSortKey(), $transformer->getSortDirection())
->get();
return $this->collection($comments, $transformer);
}
}
// Generic response.
// If valid callback parameter is provided, jsonp response can be provided.
// This is a very base method. All other responses are utilizing this.
respond(array $payload);
// Respond collection of resources
// If $transformer is not given as the second argument,
// this class does its best to transform the payload to a simple array
withCollection(
\Illuminate\Database\Eloquent\Collection $collection,
\League\Fractal\TransformerAbstract|null $transformer,
string|null $resourceKey // for JsonApiSerializer only
);
// Respond single item
withItem(
\Illuminate\Database\Eloquent\Model $model,
\League\Fractal\TransformerAbstract|null $transformer,
string|null $resourceKey // for JsonApiSerializer only
);
// Respond collection of resources with pagination
withPagination(
\Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator,
\League\Fractal\TransformerAbstract|null $transformer,
string|null $resourceKey // for JsonApiSerializer only
);
// Respond json formatted success message
// api.php provides configuration capability
success(string|array $message);
// Respond 201
// If an Eloquent model is given at an argument,
// the class tries its best to transform the model to a simple array
created(string|array|\Illuminate\Database\Eloquent\Model $primitive);
// Respond 204
noContent();
// Respond 304
notModified();
// Generic error response
// This is another base method. Every other error responses use this.
// If an instance of \Exception is given as an argument,
// this class does its best to properly format a message and status code
error(string|array|\Exception|null $message);
// Respond 401
// Note that this actually means unauthenticated
unauthorizedError(string|array|null $message);
// Respond 403
// Note that this actually means unauthorized
forbiddenError(string|array|null $message);
// Respond 404
notFoundError(string|array|null $message);
// Respond 405
notAllowedError(string|array|null $message);
// Respond 406
notAcceptableError(string|array|null $message);
// Respond 409
conflictError(string|array|null $message);
// Respond 410
goneError(string|array|null $message);
// Respond 422
unprocessableError(string|array|null $message);
// Respond 500
internalError(string|array|null $message);
// Set http status code
// This method is chain-able
setStatusCode(int $statusCode);
// Set http response header
// This method is chain-able
setHeaders(array $headers);
// Set additional meta data
// This method is chain-able
setMeta(array $meta);
// We can apply this method against an instantiated transformer,
// to get the parsed query parameters that belongs only to the current resource.
//
// e.g. GET /v1/author?value at config
// // 'offset' => 0 // if not given default value at config
// // 'sort' => 'created_at' // if given, given value
// // 'order' => 'desc' // if given, given value
// // ]
// Alternatively we can pass a key.
// $transformer->get('limit');
// Will produce limit parameter:
// // 2
get(string|null $key)
// Exactly does the same function as get.
// Was laid here, to enhance readability.
getParsedParams(string|null $key)
// Make JSON response
// Returns Appkr\Api\Http\Response object if no argument is given,
// from there you can chain any public apis that are listed above.
json(array|null $payload)
// Determine if the current framework is Laravel
is_laravel();
// Determine if the current framework is Lumen
is_lumen();
// Determine if the current request is for API endpoints, and expecting API response
is_api_request();
// Determine if the request is for update
is_update_request();
// Determine if the request is for delete
is_delete_request();