リソースとコントローラークラスの準備が整ったら、`https:///index.php?r=user/create`のようなURLを使用してリソースにアクセスできます。これは、通常のWebアプリケーションで行うことができる操作と同様です。
実際には、通常は分かりやすいURLを有効にして、HTTP動詞を利用したいと考えています。たとえば、`POST /users`リクエストは`user/create`アクションへのアクセスを意味します。これは、次のようにアプリケーション設定で`urlManager` アプリケーションコンポーネント を構成することで簡単に実現できます。
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
],
]
WebアプリケーションのURL管理と比較して、上記の主な新しい点は、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
および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'],
],
また、既存のパターンを再定義したり、このルールでサポートされる新しいパターンを追加するために、patterns
またはextraPatterns
を設定することもできます。たとえば、エンドポイントGET /users/search
で新しいアクションsearch
をサポートするには、extraPatterns
オプションを次のように設定します。
[
'class' => 'yii\rest\UrlRule',
'controller' => 'user',
'extraPatterns' => [
'GET search' => 'search',
],
]
コントローラーIDのuser
が、エンドポイントURLでは複数形であるusers
として表示されていることに気づかれたかもしれません。yii\rest\UrlRuleは、子URLルールを作成するときに、コントローラーIDを自動的に複数形にします。yii\rest\UrlRule::$pluralizeをfalse
に設定することで、この動作を無効にできます。
情報: コントローラーIDの複数形化はyii\helpers\Inflector::pluralize()によって行われます。このメソッドは、特別な複数形化ルールを尊重します。たとえば、単語
box
はboxs
ではなくboxes
として複数形になります。
自動的な複数形化が要件を満たさない場合は、yii\rest\UrlRule::$controllerプロパティを設定して、エンドポイントURLで使用される名前とコントローラーIDのマッピングを明示的に指定することもできます。たとえば、次のコードは名前u
をコントローラーIDuser
にマッピングします。
[
'class' => 'yii\rest\UrlRule',
'controller' => ['u' => 'user'],
]
yii\rest\UrlRuleに含まれる各ルールに適用される追加設定を指定することが役立つ場合があります。良い例としては、expand
パラメーターのデフォルト値の指定があります。
[
'class' => 'yii\rest\UrlRule',
'controller' => ['user'],
'ruleConfig' => [
'class' => 'yii\web\UrlRule',
'defaults' => [
'expand' => 'profile',
]
],
],
タイプミスを発見したか、このページの改善が必要だと考えますか?
githubで編集する !
コメントするにはサインアップまたはログインしてください。