kodicms/laravel-api
Composer 安装命令:
composer require kodicms/laravel-api
包简介
README 文档
README
Пакет разработан для удобства работы с API запросами. На данный момент этот модуль предоставляет всего лишь контроллер, с набором методов, которые помогут организовать работу с AJAX запросами.
Установка
composer require kodicms/laravel-api
Добавить фасад в алиасы
'RouteAPI' => KodiCMS\API\RouteApiFacade::class,
Внести изменения в файл app\Exceptions\Handler.php
...
use KodiCMS\API\Http\Response as APIResponse;
use KodiCMS\API\Exceptions\Exception as APIException;
...
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
*
* @return \Illuminate\Http\Response
*/
public function render($request, \Exception $e)
{
if ($request->ajax() OR ($e instanceof APIException)) {
return (new APIResponse(config('app.debug')))
->createExceptionResponse($e);
}
...
}
Описание
Контроллер
Контроллер необходимо наследовать от KodiCMS\API\Http\Controllers\Controller, после чего он начнет возвращать
все ответы (ошибки и т.д.) в определенном формате с возможностью выбора типа ответа (json, xml, yaml):
Пример ответа:
{
code: 200,
content: '....',
type: 'content',
method: '...'
}
Коды ответов:
200- ok110- не передан обязательный параметр в запросе120- ошибка валидации130- неизвестная ошибка140- ошибка токена150- попытка в модели установить значение защищенного поля220- ошибка прав доступа403- неавторизован404- страница не найдена
Тип ответа
error- ошибкаcontent- ответredirect- редирект
Пример ответов с различным кодом в json формате
// 200
{
code: 200,
content: '....',
type: 'content',
method: '...'
}
// 200/Redirect
{
code: 200,
targetUrl: '....',
content: '....',
type: 'redirect',
method: '...'
}
// 110
{
code: 110,
type: 'error',
failed_rules: {...}, // поля, которые не прошли валидацию с текстом ошибки
message: ... // текст ошибки
...
}
// 120
{
code: 120,
type: 'error',
errors: {...}, // текст ошибок
failed_rules: {...} поля, которые не прошли валидацию с текстом ошибки
...
}
// Другие ошибки
{
type: 'error',
message: ... // текст ошибки
...
}
Полезные методы
getParameter($key, $default = NULL, $isRequired = false)- получение параметра переданного в запросеgetRequiredParameter($key, $rules = true)- получение обязательного параметра, Вторым параметром можно указать правила валидации (true == 'required'), выбрасывает ошибку 110setMessage($message)- передача сообщения в ответsetErrors(array $errors)- передача ошибок в ответsetContent($data)- передача данных в ответ. Если передаетсяview, то он будет преобразован в HTML
Полезные параметры
jsonResponse- данные, которые будут переданы в ответ и преобразованы в JSONrequiredFields- ожидаемые поля в виде['action' => ['param1, 'param2']]
Роутер
Для модуля API создан фассад RouteAPI который используется для добавления API роутов, который автоматически
добавляет к новому маршруту возможность выбора типа ответа json, xml, yaml.
API запрос можно выполнить следующим образом:
- site.com/api.refresh.key =>
json, - site.com/api.refresh.key.json =>
json, - site.com/api.refresh.key.xml =>
xml, - site.com/api.refresh.key.yaml =>
yaml
Пример
RouteAPI::post('refresh.key', ['as' => 'api.refresh.key', 'uses' => 'API\KeysController@postRefresh']);
// Что равнозначно
Route::post('api.refresh.key{type?}', ['as' => 'api.refresh.key', 'uses' => 'API\KeysController@postRefresh'])->where('type', '\.[a-z]');
Пример контроллера с возвращением данных
use KodiCMS\API\Http\Controllers\Controller;
class PageController extends Controller
{
public function getSearch()
{
$query = $this->getRequiredParameter('search');
...
$this->setContent(view('pages.children'));
}
}
// return JsonResponse
{
code: 200,
content: 'html data',
method: 'get',
type: 'content'
}
Пример контроллера с возвратом данных в произвольной форме
use KodiCMS\API\Http\Controllers\Controller;
class MessageController extends Controller
{
public function sendMessage()
{
$message = $this->getRequiredParameter('message');
...
$this->testParam = '...';
// или
$this->jsonResponse['testParam'] = '...';
$this->setMessage($message);
}
}
// return JsonResponse
{
code: 200,
content: null,
testParam: '...'
type: 'content',
method: 'post',
message: 'message text'
}
Пример контроллера с редиректом
use KodiCMS\API\Http\Controllers\Controller;
class MessageController extends Controller
{
public function sendMessage()
{
$message = $this->getRequiredParameter('message');
...
return redirect('...');
}
}
// return JsonResponse
{
code: 200,
targetUrl: '....',
content: '....',
method: 'post',
type: 'redirect'
}
Пример контроллера с выводом HTML
use KodiCMS\API\Http\Controllers\Controller;
class MessageController extends Controller
{
public function sendMessage()
{
$message = $this->getRequiredParameter('message');
...
return view('.....');
}
}
// return JsonResponse
'html content'
Исключения
API модуль имеет свой класс исключений KodiCMS\API\Exceptions\Exception от которого лучше всего наследовать
исключения, которые используются в API контроллерах. Данный класс содержит метод responseArray, в котором содержится
список параметров, которые попадут в Response
/**
* @var int
*/
protected $code = Response::ERROR_UNKNOWN;
public function responseArray()
{
return [
'code' => $this->getCode(),
'type' => Response::TYPE_ERROR,
'message' => $this->getMessage(),
];
}
Пример кастомного класса исключений:
use KodiCMS\API\Exceptions\Exception;
use KodiCMS\API\Http\Response;
class ValidationException extends Exception
{
/**
* @var int
*/
protected $code = Response::ERROR_VALIDATION;
public function getFailedRules()
{
...
}
public function getErrorMessages()
{
...
}
/**
* @return array
*/
public function responseArray()
{
$data = parent::responseArray();
$data['failed_rules'] = $this->getFailedRules();
$data['errors'] = $this->getErrorMessages();
return $data;
}
}
kodicms/laravel-api 适用场景与选型建议
kodicms/laravel-api 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.07k 次下载、GitHub Stars 达 7, 最近一次更新时间为 2015 年 08 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 kodicms/laravel-api 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 kodicms/laravel-api 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 1.07k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 7
- 点击次数: 5
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: GNU
- 更新时间: 2015-08-27