# 5.9 RESTful
MSF 原生支持RESTful風格api,提供GET/POST/PUT/PATCH/HEAD/OPTIONS/DELETE動作的支持。
### RESTful參考
* [理解 RESTful 架構](http://www.ruanyifeng.com/blog/2011/09/restful.html)
* [RESTful API 設計指南](http://www.ruanyifeng.com/blog/2014/05/restful_api.html?from=timeline&isappinstalled=0)
* [從消費者的角度評估 REST 的價值](http://hippoom.github.io/blogs/value-of-hypermedia-from-client-perspective.html)
### verb 介紹
```
'GET', // 從服務器取出資源(一項或多項)
'POST', // 在服務器新建一個資源
'PUT', // 在服務器更新資源(客戶端提供改變后的完整資源)
'PATCH', // 在服務器更新資源(客戶端提供改變的屬性)
'DELETE', // 從服務器刪除資源
'HEAD', // 獲取 head 元數據
'OPTIONS', // 獲取信息,關于資源的哪些屬性是客戶端可以改變的
```
### MSF實現RESTful程序
```
Rest |- Controller.php 控制器
|- Route.php 路由器
```
### 使用方式
1. 在配置文件中配置路由器為: `$config['server']['route_tool'] = '\\PG\\MSF\\Route\\RestRoute'`
1. 配置URL路由規則
1. 控制器繼承 `PG\MSF\Rest\Controller`
### 推薦控制器接收不同動作映射
```
'PUT,PATCH {id}' => 'update', // 更新資源,如:/users/<id>
'DELETE {id}' => 'delete', // 刪除資源,如:/users/<id>
'GET,HEAD {id}' => 'view', // 查看資源單條數據,如:/users/<id>
'POST' => 'create', // 新建資源,如:/users
'GET,HEAD' => 'index', // 查看資源列表數據(可分頁),如:/users
'{id}' => 'options', // 查看資源所支持的HTTP動詞,如:/users/<id> | /users
'' => 'options',
```
### URL路由配置
通過請求url中的path和動作類型即可路由到對應控制器下的某個方法(method)。URL路由配置支持正則方式,在url的path中可攜帶參數。例如:
```
$config['rest']['route']['rules'] = [
'GET,POST /groups' => '/account/profile',
'GET /users/ask' => 'user/apply',
'GET /users' => 'user/index',
'GET /users/<uid:\d+>' => 'user/view',
'PUT /users/<method:\w+>' => 'user/<method>',
'DELETE /users/<uid:\d+>' => 'user/delete',
]
```
### 響應
在控制器中使用 `$this->output(<params>,); `即可;
### 狀態碼
狀態碼只能是標準的http狀態碼,所有狀態碼見 `\PG\MSF\Base\Output::$codes`
5.10 多語言
- 0 文檔說明
- 1 為什么研發新框架
- 1.1 傳統php-fpm工作模式的問題
- 1.2 壓測數據對比
- 1.3 小結
- 2 微服務框架研發概覽
- 2.1 通信框架技術選型
- 2.2 swoole
- 2.3 協程原理
- 2.4 異步、并發
- 2.5 小結
- 3 框架運行環境
- 3.1 環境變量
- 3.2 運行代碼
- 3.3 docker
- 3.4 小結
- 4 框架結構
- 4.1 結構概述
- 4.2 控制器
- 4.3 模型
- 4.4 視圖
- 4.5 同步任務
- 4.6 配置
- 4.7 路由
- 4.8 小結
- 5 框架組件
- 5.1 協程
- 5.2 類的加載
- 5.3 異步Http Client
- 5.4 請求上下文
- 5.5 連接池
- 5.6 對象池
- 5.7 RPC
- 5.8 公共庫
- 5.9 RESTful
- 5.10 多語言
- 5.11 雜項
- 5.12 小結
- 6 常見問題
- 7 附錄