Yii2.0 RESTful Web服務(4)

路由

隨着資源和控制器類準備,您可以使用URL如 http://localhost/index.php?r=user/create訪問資源,類似於你可以用正常的Web應用程序做法。

在實踐中,你通常要用美觀的URL並採取有優勢的HTTP動詞。 例如,請求POST /users意味着訪問user/create動作。 這可以很容易地通過配置urlManager應用程序組件來完成 如下所示:

'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
    'rules' => [
        ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
    ],
]

將enablePrettyUrl設置爲true,譬如訪問www.xxxxx.com時不會直接顯示www.xxxxx.com/site/index.php 而是需要在rules中增加對應的配置。

將enableStrictParsing設置爲true,該項表示訪問的Url必須至少匹配一個路由規則,否則認定爲無效,且在設置enablePrettyUrl爲true後生效。

將showScriptName設置爲true,表示在Url保留入口腳本index.php。

相比於URL管理的Web應用程序上述主要的新東西是通過RESTful API 請求yii\rest\UrlRule。這個特殊的URL規則類將會 建立一整套子URL規則來支持路由和URL創建的指定的控制器。 例如, 上面的代碼中是大致按照下面的規則

:

[
    'PUT,PATCH users/<id>' => 'user/update',
    'DELETE users/<id>' => 'user/delete',
    'GET,HEAD users/<id>' => 'user/view',
    'POST users' => 'user/create',
    'GET,HEAD users' => 'user/index',
    'users/<id>' => 'user/options',
    'users' => 'user/options',
]

該規則支持下面的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 支持的動詞。

您可以通過配置 only 和 except 選項來明確列出哪些行爲支持, 哪些行爲禁用。例如,

[
    'class' => 'yii\rest\UrlRule',
    'controller' => 'user',
    'except' => ['delete', 'create', 'update'],
],

如果UserController是繼承自ActiveController,對應的方法的禁用也可以通過yii\rest\ActiveController::actions()方法聲明(Yii2.0 RESTful Controller相關

您也可以通過配置 patterns 或 extraPatterns 重新定義現有的模式或添加此規則支持的新模式。 例如,通過末端 GET /users/search 可以支持新行爲 search, 按照如下配置 extraPatterns 選項,

[
    'class' => 'yii\rest\UrlRule',
    'controller' => 'user',
    'extraPatterns' => [
        'GET search' => 'search',
    ],

您可能已經注意到控制器IDuser以複數形式出現在users末端。 這是因爲 yii\rest\UrlRule 能夠爲他們使用的末端全自動複數化控制器ID。 您可以通過設置 yii\rest\UrlRule::pluralize 爲false 來禁用此行爲,如果您想使用一些特殊的名字您可以通過配置 yii\rest\UrlRule::controller 屬性。

yii\rest\UrlRule::controller的值在通常情況下是直接使用了urlManager中配置在rules中的user爲前綴,當然Yii2.0也提供了兩種自定義方式,一種是傳入鍵值對數組譬如將yii\rest\UrlRule::controller賦值爲"['u' => 'user' ]" 這樣後續的訪問則將u視爲控制器id,另外一種則是輸入一個數組譬如"['user', 'player']" 這樣就會生成所有傳入值對應的路由規則。Yii在路由規則這邊採用了一種比較簡單的的方式進行處理,如果採用簡單粗暴的方式,Yii完全可以犧牲一定的開發便利性,在代碼層面提高路由規則的性能,例如直接採用正則表達式的方式,但是Yii沒有這樣做。Yii在urlManager::init()的時候對所有路由進行了緩存,很好的穩定了性能與開發便利性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章