文档章节

Laravel Dingo API

麦拂沙
 麦拂沙
发布于 2017/06/02 06:03
字数 773
阅读 75
收藏 0

提供一系列工具帮助你轻松构建自己的可拓展的API

提供工具集

  • 内容协商
  • 多种认证适配
  • API版本号
  • 访问限制与限流
  • 输出数据转换
  • 错误和异常处理
  • 内部请求
  • API文档

安装

composer require dingo/api:1.0.*@dev

# 服务注册
- Lumen下:
	#在`bootstrap/app`中注册
	$app->register(Dingo\Api\Provider\LumenServiceProvider::class);
- Laravel下:
	#在`config/app.php`中注册
	`Dingo\Api\Provider\LaravelServiceProvider::class`
	#发布配置
	php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

# Facad注册
- Dingo\Api\Facade\API
- Dingo\Api\Facade\Route

env配置

  • API_STANDARDS_TREE 标准树
    • x未注册树 - 用于本地开发(建议值)
    • prs私有树 - 用于非商业交付项目
    • vnd第三方树 - 用于公开交付项目
  • API_SUBTYPE 项目简称(小写)
  • API_PREFIX 前缀(建议值 api)
  • API_DOMAIN 子域名(建议值 api.myapp.com)
  • API_VERSION 默认版本号(建议值 v1)
  • API_NAME api名称(用于生成文档)
  • API_CONDITIONAL_REQUEST 条件请求(用于客户端缓存api,默认true)
  • API_STRICT 严格模式(强制要求客户端提供Accept头指定版本号,默认false)
  • API_DEFAULT_FORMAT 响应格式(默认json)
  • API_DEBUG debug信息追加到异常跟踪栈上(默认false)

路由接管

$router = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
	$api->get(路径, 'MyController@MyAction');
	
    $api->group(['middleware' => 'foo'], function ($api) {
    });
});

响应

响应模式

  1. 直接返回集合或对象(自动处理为json)
  2. 响应构建器
    • 响应输出前morph变形流程 response > transformers > formatters > 输出
    • 基类控制器引入响应构建器
      • Trait:use Dingo\Api\Routing\Helpers;
      • 使用:$this->response或者$this->response()
    • 正常响应
      • return $this->response->array($arrayData)
      • return $this->response->item($obj, $transfomrer)
      • return $this->response->collection($objs, $transfomrer)
      • return $this->response->paginator($paginatedObjs, $transfomrer)
      • return $this->response->noContent()
      • return $this->response->created([$uri])
    • 异常响应
      • return $this->response->error($msg, $statusCode)
      • return $this->response->errorNotFound([$msg])
      • return $this->response->errorBadRequest([$msg])
      • return $this->response->errorForbidden([$msg])
      • return $this->response->errorInternal([$msg])
      • return $this->response->errorUnauthorized([$msg])
    • 增加Http头部 $this->response->withHeader($name, $value)
    • 增加元数据 $this->response->addMeta($name, $value)|setMeta([$name,=>$value])
    • 设置状态码 $this->response->setStatusCode($statuCode)

响应变形

  • 监听可选事件 ResponseIsMorphing、ResponseWasMorphedhandle响应

错误处理

  • 错误时直接抛出相应的HTTP异常,dingo会自动设置json输出及匹配的状态码

Transformer

默认使用Fractal Transfomer

调用模式

  • 预先注册好,输出时直接返回对象:app('Dingo\Api\Transformer\Factory')->register('‘MyModel, 'MyModelTransformer')
  • 预先未注册,输出对象前手动转换:return $this->response->item($obj, $transfomrer)

认证

内置支持的认证适配器

  • HTTP Basic (Dingo\Api\Auth\Provider\Basic)
  • JSON Web Tokens (Dingo\Api\Auth\Provider\JWT)
  • OAuth 2.0 (Dingo\Api\Auth\Provider\OAuth2)

调试请求

  • 头部必须带上 Accept: application/vnd.YOUR_SUBTYPE.v1+json

限流

  • 针对限定的每个路由单独生效限流
  • 默认是按ip去限流的,可修改区别键
App('Dingo\Api\Http\RateLimit\Handler')->setRateLimiter(function ($app, $request) {
    return 唯一键名;
});
  • 路由配置: 'middleware' => 'api.throttle', 'limit' => 次数, 'expires' => 分钟数

© 著作权归作者所有

共有 人打赏支持
麦拂沙
粉丝 22
博文 110
码字总数 99221
作品 1
海淀
高级程序员
laravel集成dingo+JWTAuth时出现404错误

运行环境 php5.5.12 laravel 5.1 postman 请求接口 还原场景 web开发项目中经常需要给APP写接口,而在laravel框架中一般推荐使用dingo+JWTAuth完成接口,根据搜索的结果完成了dingo和JWTAuth...

彩虹的夜晚
01/17
0
0
crazycooler/Fish-MD

Fish-MD Fish-MD是一款非常轻量级的Markdown云笔记工具,可以支持云端的数据同步功能。 和常规的markdown编辑工具相比,增加了图片的粘贴功能,可以将剪贴板中的图片,通过ctrl+v直接将图片添...

crazycooler
2017/12/11
0
0
Laravel 5.4+ Dingo +Jwt 快速搭建 API系统

执行安装 配置项目 config/app.php config/api.php 发布配置文件 : 终端执行 生成 jwt key 写入.env 在 .env 中,把 dingo 配置在最后 上面的配置不是都是必要的,可根据实际情况进行选择(上...

指尖芳华
05/01
0
0
TTboy/laravelcms

laravelPCMS V1.6.0 下载 2016-12-29 发布 基于 laravel5.2 的PHP内容管理系统 后台基于AdminLTE主题 前端组件Vue.js 集成基础的微信相关功能。是一个可以快速上手,项目开发的首选工具。 博...

TTboy
2017/03/03
0
0
laravel开发资源

集大成者 http://labs.infyom.com/laravelgenerator/ We have worked on many projects that required to create APIs and scaffold CRUD type of thing. And the problem that we faced was......

ifeixiang
2016/02/21
263
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部