Dingo包的大多数配置都预先设置好了,这样你就可以尽快的进入开发模式了,我们也可以参照config/api.php
中的env()
函数中的内容在.env
文件中去设置。
当然也可以使用AppServiceProvider
中的boot
进行设置
(这个怎么设置???)
提示: 如果你使用Laravel5,那么必须使用Dingo生成的配置文件config/api.php
或者是使用Service Provider
设置。
生成config/api.php的方法
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
Standards Tree
一共提供了3种tree,x, prs, vnd
x: unregistered tree
本地或是私有环境
prs: personal Tree
项目不是用于商业发布的
```vnd: vender tree`` 用于公开的商业项目
在.env
文件中这样配置
API_STANDARDS_TREE=vnd
还是不理解x, prs, vnd
???
Subtype
subtype 是项目或工程的简称,全部小写
API_SUBTYPE=zjpblog
前缀和子域名
通常对于api,我们会使用子域名或者是位于/api栏目下,两者只要使用一个就可以了,注意不要添加版本号到子域名或者是/api下,版本号会有header的Accept
处理
// 设置栏目行
API_PREFIX=api
//或者是设置子域名,两者选一个
API_DOMAIN=api.zhoujiping.com
版本 Version
两个作用:1,它是默认的版本号或者是没有提供版本号,使用这个,2是在生成api文档的时候会使用该版本号
API_VERSION=v1
名字 Name
API_NAME 的唯一作用是在使用API Blueprint命令生成文档的时候会使用,这样可以省去手动书写名字
API_NAME=Zhoujiping Blog
//如果上面的设置不成功,使用下面的
API_NAME="Zhoujiping Blog"
带条件的请求
由于缓存API请求的时候会使用客户端的缓存功能,所以默认是开启了带条件的请求,如果要关闭这项
API_CONDITIONAL_REQUEST=false
严格模式
严格模式要求客户端发送Accept头代替.env文件中的version,意味着不能通过浏览器访问api。
如果Strict模式开启并且使用了无效的Accept头,API会抛出一个Symfony\Component\HttpKernel\Exception\BadRequestHttpException异常。
你可以在.env中配置这个选项:
API_STRICT=false
认证提供者
默认情况下,只有basic
认证是可以用的,后面的章节会用更多的介绍,如果需要复杂功能的认证,你需要注册服务提供者
$app['Dingo\Api\Auth\Auth']->extend('oauth', function ($app) {
return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
});
登录次数限制
默认情况下,是限制登录次数的,你可以通过rate limiter注册自定义登录次数限制,也可以使用系统自带的认证和取消认证的throttle模块。
要进行更为复杂的操作,也是需要注册服务提供者的
$app['Dingo\Api\Http\RateLimit\Handler']->extend(function ($app) {
return new Dingo\Api\Http\RateLimit\Throttle\Authenticated;
});
数据返回Response Transformer
Fractal
是默认的数据返回处理Transformer.
我们可以在.env
文件中设置,
在config/api.php
中有
//怎么设置.env????
'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class),
也不可以不用上面的方法,也可以注册成服务提供者,这样可以用更多的功能:
$app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) {
$fractal = new League\Fractal\Manager;
$fractal->setSerializer(new League\Fractal\Serializer\JsonApiSerializer);
return new Dingo\Api\Transformer\Adapter\Fractal($fractal);
});
上面这个不知道怎么用,其实可以自己建立一个Transformer文件夹,如针对User Model,声明UserTransformer 类,并继承TransformerAbstract 类(laravist上这么用)
返回格式 Response Formats
默认的数据以json进行前后端的传递,你也可以自己定义
API_DEFAULT_FORMAT=json
更高级的数据格式,如使用可以跨域访问的jsonp
,需要在config/api.php
中设置,或者是注册成服务提供者
Dingo\Api\Http\Response::addFormatter('json', new Dingo\Api\Http\Response\Format\Jsonp);
错误返回格式
这个非常重要,以前经常是抛出异常,错误提示非常不友好,不规范,一定要在config/api.php
中定义好错误格式:下面是默认的,我们需要讨论讨论,搞个自己的错误格式
$app['Dingo\Api\Exception\Handler']->setErrorFormat([
'error' => [
'message' => ':message',
'errors' => ':errors',
'code' => ':code',
'status_code' => ':status_code',
'debug' => ':debug'
]
]);
开启Debug模式
API_DEBUG=true