创建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. Spring Cloud分布式微服务云架构

    分布式.微服务.云架构 JAVA语言开发.跨平台.高性能.高可用.安全.服务化.模块化.組件化.驱动式开发模式 commonservice eurekaNetflix 云端服务发现,一个基于 REST ...

  2. springboot 热部署

    1 pom文件添加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  3. Ubuntu每次启动都显示System program problem detected

    执行命令:sudo gedit /etc/default/apport 将enabled=1改为enabled=0保存退出

  4. codeforces 1140D(区间dp/思维题)

    D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  5. P3954 成绩(noip2017普及组)

    题目描述 牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是: 总成绩=作业成绩\times 20\%+×20%+小测成绩×30\%+×30%+期末考试成绩\times 50\%×50% 牛牛想 ...

  6. elasticsearch(6) 映射和分析

    类似关系型数据库中每个字段都有对应的数据类型,例如nvarchar.int.date等等,elasticsearch也会将文档中的字段映射成对应的数据类型,这一映射可以使ES自动生成的,也是可以由我们 ...

  7. 关于position的一些问题

    position属性:  static:静止  relative:相对的  fixed:固定的  absolu:绝对的 position的一些实例子如下: HTML: <!DOCTYPE htm ...

  8. 【译】REM vs EM - 世纪之争

    原文链接:https://zellwk.com/blog/rem-vs-em/ 在网络上排版的最佳做法之一是使用像rem和em这样的相对单位. 问题是,你应该使用哪个? 在rem支持者和em支持者之间 ...

  9. Python3.x - 字符串

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号( ' 或 " )来创建字符串. var1 = 'hello world' var2 = "he ...

  10. Java中String类常用方法(字符串中的子字符串的个数)

    重点内容 4种方法: 1.int indexOf(String str)返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String str, int startInde ...