文档章节

Laravel Dingo API

麦拂沙
 麦拂沙
发布于 2017/06/02 06:03
字数 773
阅读 109
收藏 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
博文 113
码字总数 100110
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

Spak—— sparkCore源码解析之RangePartitioner源码

   分区过程概览 RangePartitioner分区执行原理: 计算总体的数据抽样大小sampleSize,计算规则是:至少每个分区抽取20个数据或者最多1M的数据量。 根据sampleSize和分区数量计算每个分区的...

freeli
12分钟前
1
0
从内部自用到对外服务,配置管理的演进和设计优化实践

本文整理自阿里巴巴中间件技术专家彦林在中国开源年会上的分享,通过此文,您将了解到: 微服务给配置管理所带来的变化 配置管理演进过程中的设计思考 配置管理开源后的新探索 配置中心控制台...

阿里云官方博客
13分钟前
0
0
MySQL用户管理,常用MySQL语句、MySQL数据库备份恢复

12月6日任务 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复 13.4 mysql用户管理 grant all on *.* to 'user1' identified by 'passwd'; grant SELECT,UPDATE,INSERT on db......

zgxlinux
14分钟前
1
0
Spring异常之Druid – unregister mbean error

Spring异常之Druid – unregister mbean error 2017年04月19日 12:13:42 Dr.Zhu 阅读数:6688 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zt_fucker/arti...

linjin200
20分钟前
1
0
微信小程序webview问题

今天在改小程序的时候在使用webview的时候切换webview的地址行为,出现了诡异的情况。 默认querystring里会有多个?符号,使用的时候被微信给截取了,导致程序找不到改页面。 而且querystri...

钟元OSS
23分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部