创建api应用


 通过拷贝原有的应用,重命名得到新的应用

安装完 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

初始化高级模板

cd advanced
init

拷贝backend目录,命名为api

应用配置


1. 数据库

打开 common\config\main-local.php,配置数据库连接信息

执行 migrate 数据库迁移

yii migrate

2.应用配置

打开api\config\main.php 修改id,controllerNamespace

3. URL美化配置

打开common\config\main.php开启url路由美化规则

components' => [
// other config
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' =>true,
'rules' => [],
]
],

4. 应用别名配置

打开common\config\bootstrap.php添加以下别名

Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');

5.服务器重写url配置

在应用入口同级增加.htaccess文件就好,我们以apache为例

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule> RewriteEngine On # Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301] # Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

 Nginx 的配置

location / {
# Redirect everything that isn't a real file to index.php
try_files $uri $uri/ /index.php$is_args$args;
}

6. 启用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;

  

使用api


1 . 创建控制器,action

配置URL规则:添加入由,用user控制器

'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'pluralize' => false, //设置为false 就可以去掉复数形式了
],
],
]

说明:加入 'pluralize' => false, 就表示去掉复数形式了,再次强调不推荐

到此就成了一个 符合 RESTful 风格的API 看起来在控制器了什么也没有写,只是指定了一个模型,但是她的背后完成了很多的功能哦,列表如下:

  • GET /users: 逐页列出所有用户
  • HEAD /users: 显示用户列表的概要信息
  • POST /users: 创建一个新用户
  • GET /users/123: 返回用户 123 的详细信息
  • HEAD /users/123: 显示用户 123 的概述信息
  • PATCH /users/123: and PUT /users/123: 更新用户123
  • DELETE /users/123: 删除用户123
  • OPTIONS /users: 显示关于末端 /users 支持的动词
  • OPTIONS /users/123: 显示有关末端 /users/123 支持的动词

api\controllers 新建一个User控制器,继承 yii\rest\ActiveController,命名为 UserController,代码如下:

namespace api\controllers;
use yii\rest\ActiveController; class UserController extends ActiveController
{
public $modelClass = 'common\models\User'; }

这里创建 user控制器继承 yii\rest\ActiveController 并指定要操作的模型

2. 创建自定义的action,添加其他路由

修改 api\config\main.php,下面我们在user下添加一个send-email的动作

urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
//'pluralize' => false, //设置为false 就可以去掉复数形式了
'extraPatterns'=>[
'GET send-email'=>'send-email'
],
],
],
]

  

说明:自己编写的任何 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,你应该具体情况具体对待,切记不要乱使用 任意加各种标识,请 遵循这些 规范 状态码

控制器代码:

<?php

namespace api\controllers;
use yii\rest\ActiveController; class UserController 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']);
return $action;
} public function actionIndex()
{
//你的代码
} public function actionSendEmail() //假如是get请求
{
//业务逻辑
} }

  

3. 如果访问我们上没配置路由规则

以使用 curl命令进行访问,命令如下:

curl -i -H "Accept:application/json" "http://localhost/users"

或者使用 POSTMAN等工具请求

Yii2.0 RESTful API 基础配置教程的更多相关文章

  1. Yii2.0 RESTful API 之速率限制

    Yii2.0 RESTFul API 之速率限制 什么是速率限制? 权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流. 例如,您可以限制每个用户 10 分钟内最多调用 API 100 ...

  2. Yii2.0 RESTful API 认证教程

    认证介绍 和Web应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权状态可能没通过 sess ...

  3. Yii2.0的安装与配置教程

    版权声明:本文为博主原创文章,未经博主允许不得转载. PHP版本需求:PHP5.4.0以上,因为Yii2.0基于PHP5.4以上版本进行了完全重写. 目前有两种方法可以安装Yii2.0,一种是安装Co ...

  4. Yii2框架RESTful API教程(一) - 快速入门

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  5. Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

    之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...

  6. 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码

    前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...

  7. Yii2框架RESTful API教程

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  8. PHP框架Yii2.0安装(基础版、高级版)

    最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指 ...

  9. 从头编写 asp.net core 2.0 web api 基础框架 (1)

    工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...

随机推荐

  1. Android 问题列表

    25. Touch 事件传递机制 26. 点击事件设置监听的几种方式 27. Hander 的原理 28. Thread 和HandThread 的区别 29. AsyncTask 简介 30. As ...

  2. thinkPHP验证码不显示问题

    使用验证码的时候,不显示图片时,要清理下输出缓存:ob_clean_end();

  3. 20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8

    <网络对抗技术>Exp5 MSF基础应用 Week8 一.实验目标与内容 1.实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体我 ...

  4. JSP是一种语言

    JSP(全称Java Server Pages)是运行在服务端的语言. <%-- 注释 --%>:JSP注释,注释内容不会被发送至浏览器甚至不会被编译 <!-- 注释 -->: ...

  5. windows下安装memcached,报错:Failed to ignore SIGHUP RESULT too large

    小平板不想装虚拟机, 但是却跑不起memcached 网上虽有解决方案,但都只有一条命令, 没有出处. 翻了半天, 找到这个连接 https://commaster.net/content/insta ...

  6. kaptcha生成java验证码

    kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中. 1 ...

  7. axis调用Web服务报axis unexpected wrapper element{XXXX}XXX错误的解决

    使用axis调用WebService时报错:axis unexpected wrapper element{XXXX}YYY .... expected {XXXX}. 经查,XXXX为wsdl文件中 ...

  8. Element-ui 更新tableData 中 row的某一个属性时,没有更新视图的问题

    在一个报警音管理的页面中,每次点击试听的时候,需要把‘试听’ 更新为 ‘停止’, 起初我们给row.play=0时,显示为 试听,row.play=1时显示为停止, 但是在代码中每次为row.play ...

  9. amaze ui 滚动监听

    引入   此框架的css  js    前提还要有jquery http://amazeui.org/javascript/scrollspy 然后看这个链接里的各种动画 运用方法就是  在你想要有动 ...

  10. Golang的数组

    Golang数组 package main import "fmt" func main() { // 定义一个长度为10,元素类型为string的值 li2 := [10]str ...