文档章节

Laravel Dingo API

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

没有更多内容

加载失败,请刷新页面

加载更多

驼峰变量名的转换

package com.mmall.test;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 需求:1. 将字符串 user_name_abc 转换为 userNameAbc * 2. 将字符串 us......

蚂蚁-Declan
29分钟前
5
0
HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。 序号 方...

踏破铁鞋无觅处
32分钟前
2
0
知识点043-selenium自动化测试网页工具的使用

【摘要】 Selenium是一个主要用于Web应用自动化测试的工具集合。但其作用不仅仅局限于测试领域,还可以用于浏览器行为模拟以及屏幕抓取等,在行业内有着广泛的应用。Selenium支持主流的浏览器...

侠客行之石头
39分钟前
1
0
B250F I219V安装windows server 网卡驱动

https://blog.csdn.net/ryu2003/article/details/50855146

梦想游戏人
39分钟前
1
0
MacOS Install Docker

使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker。 Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装: $ brew cask install dock...

Linux就该这么学
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部