yii2 RESTful api的詳細使用

2022-07-04 08:30:11 字數 3535 閱讀 4591

什麼是restful風格的api

對於各種客戶端裝置與服務端的通訊,我們往往都通過api為客戶端提供資料,提供某種資源。關於restful的概念,一查一大推,一兩句也解釋不清,姑且先按照我們通俗的理解:在眾多風格、眾多原則的api中,restful就是一套比較優秀的介面呼叫方式。

yii2如何實現restful風格的api

1、建立單獨的應用程式

為了增加程式的可維護性,易操作性,我們選擇新建一套應用程式,這也是為了和前台應用、後台應用區分開操作。有些人要嚷嚷了,為啥非得單獨搞一套呢?如果你就單純的提供個別的幾個h5頁面的話,那就沒有必要了,但事實往往是客戶端要公升級啊,要增加不同的版本啊,這就需要我們不但要後端不僅要增加一套單獨的應用程式,我們還要增加各種版本去控制。

在web前端(frontend)和後端(backend)的同級目錄,新建乙個資料夾,命名api,其目錄結構如下所示:

├─assets

├─config

│ bootstrap.php

│ main-local.php

│ main.php

│ params-local.php

│ params.php

├─runtime

└─web

│ index.php

├─assets

└─css

可以看出其目錄結構基本上同backend沒有其他差異,因為我們就是拷貝backend專案,只是做了部分優化。

2、為新建的api應用程式美化路由

首先保證你的web伺服器開啟rewrite規則,細節我們就不說了,不過這是前提。

接著配置api/config/main.php檔案

'components' =>[

//other config

'urlmanager' =>[

'enableprettyurl' => true,

'showscriptname' => false,

'enablestrictparsing' =>true,

'rules' => ,]

],

最後只需要在應用入口同級增加.htaccess檔案就好,我們以apache為例

options +followsymlinks

indexignore */*

rewriteengine on

# if a directory or a file exists, use it directly

rewritecond % !-f

rewritecond % !-d

# otherwise forward it to index.php

rewriterule . index.php

rewriterule \.svn\/ /404.html

rewriterule \.git\/ /404.html

3、利用gii生成測試modules用了便於演示說明,我們新建一張資料表goods表,並向其中插入幾條資料。

create table `goods` (

`id` int(11) not null auto_increment,`name` varchar(100) not null

default '',primary

key(`id`)

) engine=innodb default charset=utf8;

insert into `goods` values ('1', '11111');

insert into `goods` values ('2', '22222');

insert into `goods` values ('3', '333');

insert into `goods` values ('4', '444');

insert into `goods` values ('5', '555');

接著我們先利用gii生成modules後,再利用gii模組,按照下圖中生成goods資訊

現在,我們的api目錄結構應該多個下面這幾個目錄

├─models

│ goods.php

│├─modules

│ └─v1

│ │ module.php

│ │

│ ├─controllers

│ │ defaultcontroller.php

│ │ goodscontroller.php

│ │

│ └─views

│ └─

default

│ index.php

4、重新配置控制器為了實現restful風格的api,在yii2中,我們需要對控制器進行一下改寫

<?php 

@see

namespace api\modules\v1\controllers;

useyii\rest\activecontroller;

class goodscontroller extends

activecontroller

5、為goods配置url規則

'rules' =>[

['class' => 'yii\rest\urlrule',

'controller' => ['v1/goods']

],]

6、模擬請求操作經過上面幾個步驟,到此我們已經為goods成功建立了滿足restful風格的api了。為了更好更方便的演示,我們借助工具postman進行模擬請求。

為了見證一下我們的操作,我們用postman請求一下get /v1/goods看看結果如何:

從上面截圖中可以清楚的看到,get /v1/goods 已經能夠很方便的獲取我們表中的資料了。

當然,yii2還對該api封裝了如下操作:

不信的話我們可以利用postman傳送乙個post請求到/v1/goods,我們會發現成功建立了乙個新的商品。

如果你的控制器末端不是複數(比如是blog非blogs)請保證請求的時候是複數!這是因為在restful架構中,**中只能有名詞而不能包含動詞,名詞又往往與資料表相對應,資料表呢又是乙個「集合」,因此該名詞往往是複數的形式。

7、關於授權認證

yii2擴充套件yii2 imagine遇到的問題

最近在使用yii2移植 時,在縮圖那裡卡了兩天,幾乎搞得想崩潰,但經過我不屈不撓的努力,終於成功搞定!剛開始一直按照網上的教程,在cmd使用命令列安裝,php composer.phar require prefer dist yiisoft yii2 imagine ps 附上該方法教程 但是一直...

Yii2 配置yii2 redis擴充套件

前提 已經安裝redis。一 包檔案安裝 yiisoft yii2 redis extentions.php然後配置vender yiisoft extensions.php檔案 yiisoft yii2 redis array name yiisoft yii2 redis version 2.0...

Yii2 配置yii2 redis擴充套件

前提 已經安裝redis。一 包檔案安裝 yiisoft yii2 redis extentions.php 然後配置vender yiisoft extensions.php檔案 yiisoft yii2 redis array name yiisoft yii2 redis version 2....