yii2restful规范的api使用
说明:restful是一套优秀的接口调用规范。
使用规范:
1,安装yii2
使用composer安装
安装完 Composer
,运行下面的命令来安装 Composer Asset
插件:
php composer.phar global require "fxp/composer-asset-plugin:^1.2.0"
安装高级的应用程序模板,运行下面的命令:
php composer.phar create-project yiisoft/yii2-app-advanced advanced 2.0.13认证方式
初始化高级模板
namespace frontend\controllers; use yii\rest\ActiveController;
use yii\web\Response; use yii\filters\auth\CompositeAuth;
use yii\filters\auth\QueryParamAuth; class BookController extends ActiveController
{
public $modelClass = 'frontend\models\Book'; public function behaviors() {
$behaviors = parent::behaviors(); $behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
/*下面是三种验证access_token方式*/
//1.HTTP 基本认证: access token 当作用户名发送,应用在access token可安全存在API使用端的场景,例如,API使用端是运行在一台服务器上的程序。
//HttpBasicAuth::className(),
//2.OAuth 2: 使用者从认证服务器上获取基于OAuth2协议的access token,然后通过 HTTP Bearer Tokens 发送到API 服务器。
//HttpBearerAuth::className(),
//3.请求参数: access token 当作API URL请求参数发送,这种方式应主要用于JSONP请求,因为它不能使用HTTP头来发送access token
//http://localhost/user/index/index?access-token=123
QueryParamAuth::className(),
],
]; $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
return $behaviors;
}
}
cd advanced
init
修改数据库连接属性
打开 common\config\main-local.php
,配置数据库连接信息
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=yiiapi',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
],
执行 migrate
数据库迁移
yii migrate
拷贝backend目录,命名为api
打开api\config\main.php
修改id
,controllerNamespace
:
return [
'id' => 'app-api',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'api\controllers',
]
打开common\config\main.php
开启url
路由美化规则
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
打开common\config\bootstrap.php
添加以下别名
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
为什么要单独创建API应用
单独创建API应用,目的是便于维护,可以避免以下问题
- 配置的冲突
- 控制器的命名不便
- url美化规则冲突
- 分工明确
frontend
为前台目录;backend
为后台目录;api
为api目录
接下来打开 api\controllers
新建一个User控制器,继承 yii\rest\ActiveController
,命名为 UserController
,代码如下:
<?php
namespace api\controllers;
use yii\rest\ActiveController;
class UserController extend extends ActiveController
{
public $modelClass = 'common\models\User';
}
这里创建 user
控制器继承 yii\rest\ActiveController
并指定要操作的模型
启用JSON 输入
配置 request
应用程序组件的 parsers
属性使用 yii\web\JsonParser
用于 JSON
输入
打开配置文件 api\config\main-local.php
修改为如下代码:
<?php $config = [
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'P0r2XoT9LCUnyVlSgxBbJOqQxdCJ3i29',
'parsers' => [
'application/json' => 'yii\web\JsonParser', ],
],
],
]; if (!YII_ENV_TEST) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
]; $config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
} return $config;
配置URL规则
为刚才的 user
控制器添加url美化规则
打开 api\config\main.php
修改 components
属性,添加下列代码:
...
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user'
],
],
]
...
ok,到此就成了一个 符合 RESTful
风格的API 看起来在控制器了什么也没有写,只是指定了一个模型,但是她的背后完成了很多的功能哦,列表如下:
GET /users
: 逐页列出所有用户HEAD /users
: 显示用户列表的概要信息POST /users
: 创建一个新用户GET /users/123
: 返回用户 123 的详细信息HEAD /users/123
: 显示用户 123 的概述信息PATCH /users/123
: and PUT /users/123: 更新用户123DELETE /users/123
: 删除用户123OPTIONS /users
: 显示关于末端 /users 支持的动词OPTIONS /users/123
: 显示有关末端 /users/123 支持的动词
如何访问呢
你可以使用 curl
命令进行访问,命令如下:
curl -i -H "Accept:application/json" "http://localhost/users"
命令行下还是比较麻烦的,也不方便测试,推荐使用 API
测试工具
这类的工具有很多,我就不一一列举了,这里推荐 Postman
,很好很强大,Chorme
也有插件,可以安装,这里我推荐直接下载软件安装调试,比较方便
你可能发现了 访问任何路由地址都是加的s
,users
, 为什么呢? 资源
,你要理解 资源
二字,既然是资源肯定是个集合,肯定有一大堆,所以要加上复数,我是这么理解的。
你说我就是不想加上s
,我就想采用http://localhost/user
这种方式来进行访问,好吧,可以,满足你,只是不推荐
继续打开配置文件api\config\main.php
修改刚才添加的 urlManager
如下:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'pluralize' => false, //设置为false 就可以去掉复数形式了
],
],
]
加入 'pluralize' => false,
就表示去掉复数形式了,再次强调不推荐
ok,在控制器中我们没有写任何一句代码,他就给我们生成许多方法,但是有时候我们可能需要修改一些代码,来达到我们想要的效果,比如连表查询,然后再返回数据
接下来我们就实现这样的功能:
打开刚才新建的user
控制器, 重写 action
方法:
<?php
namespace api\controllers;
use yii\rest\ActiveController;
class UserController extend extends ActiveController
{
public $modelClass = 'common\models\User';
public function actions()
{
$action= parent::actions(); // TODO: Change the autogenerated stub
unset($action['index']);
unset($action['create']);
unset($action['update']);
unset($action['delete']);
}
public function actionIndex()
{
//你的代码
}
}
这样我们就可以重写他的代码了。哈哈
我们再新建一个自己的 action
<?php
namespace api\controllers;
use yii\rest\ActiveController;
class UserController extend extends ActiveController
{
public $modelClass = 'common\models\User';
public function actions()
{
$action= parent::actions(); // TODO: Change the autogenerated stub
unset($action['index']);
unset($action['create']);
unset($action['update']);
unset($action['delete']);
}
public function actionIndex()
{
//你的代码
}
public function actionSendEmail() //假如是get请求
{
//业务逻辑
}
}
然后试着访问一下 http://localhost/users/send-email
,报错?找不到?
报错就对了,那是因为我们没有设置其他路由访问
修改 api\config\main.php
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
//'pluralize' => false, //设置为false 就可以去掉复数形式了
'extraPatterns'=>[
'GET send-email'=>'send-email'
],
],
],
]
接下来重新访问就没有问题了,ps:你自己编写的任何 action
都要在 extraPatterns
进行配置
差点忘了 状态码
这个东西,我们现在所有的东西返回来的都是一个 JSON
,加入没有数据局返回的是空的数组,所以这肯定不行啊,我们得加上 一些特定的状态码 来标识这些数据啊,怎么加?
继续修改 api\config\main.php
在 components
添加如下代码:
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
$response->data = [
'success' => $response->isSuccessful,
'code' => $response->getStatusCode(),
'message' => $response->statusText,
'data' => $response->data,
];
$response->statusCode = 200;
},
],
这里统一使用 200
来表示,当然并不是所有的都是 200,你应该具体情况具体对待,切记不要乱使用 任意加各种标识,有时候你可能需要和一些前端讲道理了 所以请让他们务必 遵循这些 规范 状态码
2,权限认证
Yii 2.0 RESTful API 认证教程
隔了怎么长时间,终于到了 Yii2.0
RESTful
API
认证介绍了。 继上篇Yii2.0 RESTful API快速搭建教程
废话不多说,直接正文开始
认证介绍
和Web应用不同,RESTful
APIs
通常是无状态的, 也就意味着不应使用 sessions
或 cookies
, 因此每个请求应附带某种授权凭证,因为用户授权状态可能没通过 sessions
或 cookies
维护, 常用的做法是每个请求都发送一个秘密的 access token
来认证用户, 由于 access token
可以唯一识别和认证用户,API
请求应通过 HTTPS
来防止man-in-the-middle (MitM) 中间人攻击.
认证方式
- HTTP 基本认证 :access token 当作用户名发送,应用在access token可安全存在API使用端的场景, 例如,API使用端是运行在一台服务器上的程序。
- 请求参数:
access token
当作API URL请求参数发送,例如https://example.com/users?access-token=xxxxxxxx
, 由于大多数服务器都会保存请求参数到日志, 这种方式应主要用于JSONP
请求,因为它不能使用HTTP头来发送access token
- OAuth 2 : 使用者从认证服务器上获取基于
OAuth2
协议的access token
, 然后通过HTTP Bearer Tokens
发送到API
服务器。
上方进行简单介绍,内容来自 Yii Framework 2.0 权威指南
实现步骤
配置
我们都知道 Yii2.0
默认的认证类都是 User
,前后台都是共用一个认证类,因此我们要把API
认证类 单独分离出来,达到前、后、API都分离, 继上一章:(这里暂时使用默认User数据表,正式环境请分离不同的数据表来进行认证)
打开 api\config\main.php
配置 user
应用组件:
- 设置
identityClass
属性为哪个认证类 - 设置
enableSession
属性为false
- 设置
enableAutoLogin
属性为true
将
session
组件注释掉,或删掉'user' => [
'identityClass' => 'api\models\User',
'enableAutoLogin' => true,
'enableSession'=>false,
//'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
],
//'session' => [ // this is the name of the session cookie used for login on the backend
// 'name' => 'advanced-backend',
// ],
编写 api\models\User.php
实现认证类,继承 IdentityInterface
将 common\models\User
类拷贝到 api\models\
目录下,修改命名空间为api\models
<?php
namespace api\models;
use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
...
class User extends ActiveRecord implements IdentityInterface
{
...
...
}
将 common\models\LoginForm.php
类拷贝到api\models\
目录下,修改命名空间,并重写login方法:
<?php
namespace api\models;
use Yii;
use yii\base\Model;
...
...
public function login()
{
if ($this->validate()) {
$access_token=$this->_user->generateAccessToken();
$this->_user->save();
return $access_token;
} else {
return false;
}
}
上方代码给User模型添加了一个generateAccessToken()
方法,因此我们到api\models\User.php
中添加此方法
namespace api\models;
use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
...
...
class User extends ActiveRecord implements IdentityInterface
{
...
...
/**
* 生成accessToken字符串
* @return string
* @throws \yii\base\Exception
*/
public function generateAccessToken()
{
$this->access_token=Yii::$app->security->generateRandomString();
return $this->access_token;
}
}
接下来打开 之前的User
控制器编写登录方法
use api\models\LoginForm;
...
... //省略一些代码
/**
* 登陆
* @return array
* @throws \yii\base\Exception
* @throws \yii\base\InvalidConfigException
*/
public function actionLogin()
{
$model = new LoginForm();
if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
return [
'access_token' => $model->login(),
];
} else {
return $model->getFirstErrors();
}
}
...
最后新增一条URL规则
打开 api\config\main.php
修改 components
属性,添加下列代码:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'extraPatterns'=>[
'POST login'=>'login',
],
],
],
]
使用一个调试工具来进行测试 http://youdomain/users/login
记住是POST
请求发送,假如用POSTMAN
有问题的话指定一下 Content-Type:application/x-www-form-urlencoded
。
ok,不出意外的话,相信你已经可以收到一个access_token了,接下来就是如何使用这个token,如何维持认证状态,达到不携带这个token将无法访问,返回401
维持认证状态
实现认证只需两步:
- 在你的
REST
控制器类中配置authenticator
行为来指定使用哪种认证方式 - 在你的 user identity class 类中实现 yii\web\IdentityInterface::findIdentityByAccessToken() 方法.
接下来我们围绕这两步来实现:
添加一个REST控制器
- 因我这里暂未设计其他数据表 所以我们暂且还使用
User
数据表吧
- 在
api\controllers\
新加一个控制器 命名为ArticleController
并继承yii\rest\ActiveController
,配置认证方式代码:代码如下:
<?php
namespace api\controllers;
use yii\rest\ActiveController;
use Yii;
use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;
class ArticleController extends ActiveController
{
public $modelClass = 'api\models\User';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBasicAuth::className(),
HttpBearerAuth::className(),
QueryParamAuth::className(),
],
];
return $behaviors;
}
}
注意:这个控制器并非真正的Article,实则还是User
- 实现
findIdentityByAccessToken()
方法:
打开 api\models\User.php
重写 findIdentityByAccessToken()
方法
...
...
class User extends ActiveRecord implements IdentityInterface
{
...
...
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['access_token' => $token]);
}
...
}
- 为刚才新加的控制器添加路由规则(ps:好像多了一步......)
修改 api\config\main.php
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'extraPatterns'=>[
'GET send-email'=>'send-email'
'POST login'=>'login',
],
],
['class' => 'yii\rest\UrlRule',
'controller' => 'article',
'extraPatterns'=>[
],
],
],
]
接下来访问一下你的域名 http://youdomain/articles
,不携带任何参数是不是返回 401了?
ok,这里介绍两种访问方式,一种是URL访问,另一种是通过header
来进行携带
- http://youdomain/articles?access-token=y3XWtwWaxqCEBDoE-qzZk0bCp3UKO920
- 传递
header
头信息Authorization:Bearer y3XWtwWaxqCEBDoE-qzZk0bCp3UKO920
注意 Bearer 和你的token中间是有 一个空格的,很多同学在这个上面碰了很多次
好啦,基于YII2.0 RESTful 认证就此结束了,
更过完整的功能 请移步官方文档 授权验证 另外还有速率验证,就自行发觉吧 另外,如果看不懂,或者写的不好,请移步 魏曦 老师的视频教程,本人所有内容都是跟随 魏曦老师 学的 魏曦教你学
写完认证发现我们的接口返回的数据不是很直观,现实生活中通常也不是这样子的,我们可能会返回一些特定的格式
自定义响应内容
打开 api\config\main.php
在 components
数组里面添加如下内容分
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
$response->data = [
'success' => $response->isSuccessful,
'code' => $response->getStatusCode(),
'message' => $response->statusText,
'data' => $response->data,
];
$response->statusCode = 200;
},
],
这里的状态码统一设为 200 ,具体的可另行配置,假如登陆操作 密码错误或者其他,我们可以在控制器中这样使用:
$response = Yii::$app->response;
$response->setStatusCode(422);
return [
'errmsg' => '用户名或密码错误!'
];
3,版本控制:本质是请求不同模块
Yii2.0 RESTful API 之版本控制
之前我写过两篇关于 Yii2.0 RESTful API
如何搭建,以及 认证
等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现。
索性就从头开始一步一步搭建吧,但是关于一些概念以及使用本篇就不一一解释了,可以参考 第一篇 Yii2.0 RESTful API 基础配置教程 进行配置
安装Yii2.0
通过 Composer 安装
这是安装Yii2.0的首选方法。如果你还没有安装 Composer
,你可以按照这里的说明进行安装。
安装完 Composer
,运行下面的命令来安装 Composer Asset
插件:
composer global require "fxp/composer-asset-plugin:^1.2.0"
安装高级的应用程序模板,运行下面的命令:
composer create-project yiisoft/yii2-app-advanced yii-api 2.0.14
拷贝backend目录,命名为api
打开api\config\main.php
修改id
,controllerNamespace
:
return [
'id' => 'app-api',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'api\controllers',
]
初始化高级模板
在初始化之前不妨先看下这篇文章
cd advanced
php init
打开common\config\main.php
开启url
路由美化规则
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
打开common\config\bootstrap.php
添加以下别名
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
ok,以上工作准备完毕,接下来进入正题, 关于版本更多介绍可以参考 权威指南 ,这里不过多解释(PS:主要我也不会......)
我的理解: Yii2 的版本你可以理解为不同的模块,每一个版本就是一个新的模块,比如常见的v1,v2等。
模块的搭建
关于如何生成模块,我们可以使用GII来进行生成.
配置 GII
打开 api/config/main-local.php
文件 修改如下:
if (!YII_ENV_TEST) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '*']
];
}
我这里因为使用的是 Homestead ,默认是不允许访问 GII
的,所以得加上 'allowedIPs' => ['127.0.0.1', '*']
,否则会出现 Forbidden (#403), 你可以根据自己的需要来进行配置,或者不配置
生成Modules
浏览器中输入 http://your host/gii
,可以看到 Module Generator
,点击 Start
Modules Class
中输入:api\modules\v1\Module
Module ID
中输入v1,(一般会自动输入)
点击 Preview
最后点击 Generate
进行生成
配置模块
打开 api/config/main.php
文件,修改 modules
'modules' => [
'v1'=>[
'class'=>'api\modules\v1\Module',
],
],
接着修改 urlManager
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/default',
'extraPatterns'=>[
'GET index'=>'index',
],
],
],
],
基于以上,Yii2.0 RESTFul API 就实现了版本管理,我们可以通过如下地址进行访问:
http://localhost/v1/defaults
多说一点,我上方的地址是已经映射到api/web目录,请根据自己的实际情况进行配置
打开刚生成的 modules
文件目录,可以看到里面存在一个 v1
的目录,可以看到该目录还有一个controllers
,以及一个 views
目录 ,我们刚才访问的 defaults
其实就是这两个文件,和传统的web项目一样控制器渲染视图
好了,你可能知道了,我们以后的控制器代码就放到 modules/v1/controllers
里了
刚才仅仅是默认GII为我们生成的代码,因为我们是API,所以 views
目录,我们一般情况下用不到。
新建一个 rest
的控制器 在 modules\v1\controllers
下新建 UserController
<?php
namespace api\modules\v1\controllers;
use yii\rest\Controller;
/**
* User controller for the `v1` module
*/
class UserController extends Controller
{
/**
* @return string
*/
public function actionIndex()
{
return 'this is v1/user';
}
}
修改 api/config/main.php
中的urlManager
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/default',
'extraPatterns'=>[
'GET index'=>'index',
],
],
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/user',
'extraPatterns'=>[
'GET index'=>'index',
],
],
],
],
试着访问下
http://localhost/v1/users/index
ok,以上就是 Yii2.0
版本管理的实现方式
格式化响应
修改 api/config/main.php
在components
数组中添加 response
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
$response->data = [
'success' => $response->isSuccessful,
'code' => $response->getStatusCode(),
'message' => $response->statusText,
'data' => $response->data,
];
$response->statusCode = 200;
},
],
4,速率限制:防止恶意请求
限流 (Rate Limiting)
为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。
要启用限流, user identity class 应该实现 yii\filters\RateLimitInterface。 这个接口需要实现以下三个方法:
getRateLimit()
:返回允许的请求的最大数目及时间,例如,[100, 600]
表示在 600 秒内最多 100 次的 API 调用。loadAllowance()
:返回剩余的允许的请求和最后一次速率限制检查时 相应的 UNIX 时间戳数。saveAllowance()
:保存剩余的允许请求数和当前的 UNIX 时间戳。
你可以在 user 表中使用两列来记录容差和时间戳信息。 loadAllowance()
和 saveAllowance()
可以通过实现对符合当前身份验证的用户的这两列值的读和保存。 为了提高性能,你也可以考虑使用缓存或 NoSQL 存储这些信息。
Implementation in the User
model could look like the following:
public function getRateLimit($request, $action)
{
return [$this->rateLimit, 1]; // $rateLimit requests per second
}
public function loadAllowance($request, $action)
{
return [$this->allowance, $this->allowance_updated_at];
}
public function saveAllowance($request, $action, $allowance, $timestamp)
{
$this->allowance = $allowance;
$this->allowance_updated_at = $timestamp;
$this->save();
}
一旦 identity 实现所需的接口,Yii 会自动使用 yii\filters\RateLimiter 为 yii\rest\Controller 配置一个行为过滤器来执行速率限制检查。如果速度超出限制, 该速率限制器将抛出一个 yii\web\TooManyRequestsHttpException。
你可以参考以下代码 在你的 REST 控制器类里配置速率限制:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['rateLimiter']['enableRateLimitHeaders'] = false;
return $behaviors;
}
当速率限制被激活,默认情况下每个响应将包含以下 HTTP 头发送目前的速率限制信息:
X-Rate-Limit-Limit
:同一个时间段所允许的请求的最大数目;X-Rate-Limit-Remaining
:在当前时间段内剩余的请求的数量;X-Rate-Limit-Reset
:为了得到最大请求数所等待的秒数。
你可以禁用这些头信息通过配置 yii\filters\RateLimiter::$enableRateLimitHeaders 为 false, 就像在上面的代码示例所示。
注意事项:
1,对应命名空间改成api,
2,api模块要单独分离
3.若启用 'enableStrictParsing' => true,,所有的restful自动生成接口,
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'article',
'ruleConfig'=>[
'class'=>'yii\web\UrlRule',
'defaults'=>[
'expand'=>'createdBy',
]
],
'extraPatterns'=>[
'POST search' => 'search'
],
], ['class'=>'yii\rest\UrlRule',
'controller'=>'top10',
'except'=>['delete','create','update','view'],
'pluralize'=>false,
], ['class'=>'yii\rest\UrlRule',
'controller'=>'adminuser',
'except'=>['delete','create','update','view'],
'pluralize'=>false,
'extraPatterns' => [
'POST login' => 'login',
] ], ],
],
yii2restful规范的api使用的更多相关文章
- JAVA语言规范和API网址
Java语言规范: http://docs.oracle.com/javase/specs/ Java API: http://docs.oracle.com/javase/8/docs/api/in ...
- 代码规范、API设计等规范
一份整理好了的规范文档,node后端开发用到 "规范是个好东西..." - 鲁迅 以下规范仅作为参考 1.代码规范 命名 尽量保证命名更加语义化 文件命名采用下划线命名法 // g ...
- 或许是 WebGIS 下一代的数据规范 - OGC API 系列
目录 1. 前言 1.1. 经典的 OGC 标准回顾 1.2. 共同特点与时代变化 1.3. 免责声明 2. 什么是 OGC API 2.1. OGC API 是一个开放.动态的规范族 2.2. OG ...
- 符合RESTful规范的API
统一使用的utils,serializers: class BaseResponse: def __init__(self): self.code = 1000 self.data = None se ...
- 命名规范 api-guidelines api规范
https://weui.io weui.css .weui-cell_select-before .weui-cell__bd:after{ display:none; } .weui-cell_s ...
- 1.6Java语言规范、API、JDK、和IDE
要点提示:Java语言规范定义了Java的语法,Java库则在JavaAPI中定义.JDK是用于开发和运行Java程序的软件.IDE是快速开发程序的集成开发环境. 计算机语言有严格的使用规范.
- 用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314 ...
- HTTP API响应数据规范整理
概述 本文档为本人对长期开发API接口所整理的经验总结,如有不完善或不合理的地方,望各位多提意见. 文档目的为规范服务器端API接口,便于服务器端与客户端代码重用.服务器端和客户端可根据实际所定义规范 ...
- 从入门到自闭之Python--RESTful API规范与序列化
RESTful API规范 REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fieldi ...
随机推荐
- Scaled Exponential Linear Unit
https://www.bilibili.com/video/av9770302/?p=11 Relu Leaky Relu Parametric Relu就是把leaky部分的斜率学出来,而不是指定 ...
- nginx配置虚拟主机vhost的方法详解
Nginx vhost配置,可实现基于ip.端口号.servername的虚拟主机,同时可避免直接修改主配置文件.在nginx下配置虚拟主机vhost非常方便.这篇文章主要介绍了nginx配置虚拟主机 ...
- vue2Leaflet使用 Vue2Leaflet-master 的demo
首先下载该demo 地址:https://github.com/KoRiGaN/Vue2Leaflet 下载后可以运行里面的例子,在examples文件夹内,该文件夹本身就是一个完整的项目 然后cmd ...
- javaScript函数立即执行《1》
javaScript函数立即执行<1> 函数立即执行,常见两种写法: >>> (function(){ })() >>> (function(){ }( ...
- Dubbo分布式服务框架
Dubbo (开源分布式服务框架) 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高 ...
- The All-purpose Zero (最长公共子序列)
题意:求最长公共子序列,但是有个辅助条件,那就是如果那个值为0,那么他可以更换为任意值. 思路:假设现在只剩下没有0的序列是不是就很好求了?那么我们的想法就是看有没有办法将0往最左端或者最有端移动,显 ...
- K均值
K-means算法的工作流程 首先,随机确定k个初始点的质心:然后将数据集中的每一个点分配到一个簇中,即为每一个点找到距其最近的质心,并将其分配给该质心所对应的簇:该步完成后,每一个簇的质心更新为该簇 ...
- 【css】适配iphoneX
/*适配iphoneX*/ @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-d ...
- 使用addeventlistener为js动态创建的元素添加事件监听
点击li弹出内容,并且动态添加li之后有效 <button onclick="addFunction()">点我增加</button> <ul> ...
- 0.1:Why are We Addicted to Games
文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 前言 本系列仅用于记录并分享自己的学习过程,以及学习过程中遇到的问题,如有 ...