# restful api
[TOC]
>[success] restful是一種軟件設計風格,主要用于客戶端與服務器端的交互,一般來說restful基于http/https協議,通過某一個唯一標識符(URI)請求對應的服務器資源

## restful作用
>[info] 為前端(APP端/PC瀏覽器端/微信端等等)提供一套簡單并且統一的請求方式來從后端(服務器)獲取需要的數據
> 提供接口的方式:基于http/https協議
> 返回接口數據的形式主要為:JSON和XML
## 資源路徑
在restful api中每個資源路徑都對應一個唯一的資源,所以規定網站不能有動詞,只能有名詞,并且一般來說為重數
```
http://api.local.com/api/v1/movies----表示電影資源 get獲取多條記錄 post 添加
http://api.local.com/api/v1/images/1 ----表示圖片資源 獲單條 修改 刪除 get put delete
```
## Http動詞
```
POST /articles -- 創建文章內容
GET /articles -- 獲取全部
GET /articles/1 -- 獲取主鍵id為1的文章
PUT /articles/1 -- 修改參數為1的文章
DELETE /articles/1 -- 刪除參數為1的文章
...
協議還有很多,常用的就增刪改查
HEAD:獲取資源的元數據。
OPTIONS:獲取信息,關于資源的哪些屬性是客戶端可以改變的。
這二個個不常用,但是也要記住下,也是比較有用的
```
## 過濾信息
如果記錄數量很多,服務器不可能都將它們返回給用戶。API應該提供參數,過濾返回結果。
下面是一些常見的參數。
```
limit=10:指定返回記錄的數量
offset=10:指定返回記錄的開始位置。
page=2&per_page=100:指定第幾頁,以及每頁的記錄數。
sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。
animal_type_id=1:指定篩選條件
```
參數的設計允許存在冗余,即允許API路徑和URL參數偶爾有重復。比如,GET /zoo/ID/animals 與 GET /animals?zoo\_id=ID 的含義是相同的。
## 狀態碼
| 狀態碼 | 含義 | 說明 |
| --- | --- | --- |
| 200 | OK | 操作成功, 并返回數據 get |
| 201 | CREATED | 新建成功 post |
| 202 | Accepted | 修改成功 put |
| 204 | NO CONTENT | 刪除成功 delete |
| 400 | BAD REQUEST | 請求語法錯誤 |
| 403 | Forbidden | 請求沒有權限的資源 |
| 5xx | | 服務器端錯誤 |
- 基礎
- 安裝PHP
- 語言基礎
- 變量
- 變量操作
- 超全局數組變量
- 變量作用域
- 變量傳值方式
- 常量
- 數據類型
- 運算符
- 流程控制
- 文件包含
- 錯誤處理
- 字符串操作
- 數組
- 函數
- 進階
- 面向對象
- 提高
- TP
- 安裝項目
- 框架基礎知識
- 命令創建模塊
- URL生命周期
- 路由操作
- Request請求類
- 參數綁定
- 依賴注入
- 模板操作
- 查詢操作
- 添加操作
- laravel
- ☆目錄結構
- CSRF攻擊
- ☆路由
- ☆控制器
- ☆請求類
- ☆視圖
- ☆模板繼承
- ☆表單驗證
- ☆DB類
- ☆模型
- ☆數據庫遷移
- 類型、修飾、索引
- ☆數據填充
- ☆數據分頁
- ☆session處理
- ☆中間件
- ☆緩存操作
- ☆文件上傳
- ☆接口操作
- ☆擴展插件
- restful
- 工作
- 工作記錄
- QQ登錄
- 新浪登錄
- 微信登錄
- sphinx搜索
- 數據庫
- MySQL
- ☆數據庫操作
- ☆數據表操作
- ☆數據的操作
- 待修改
- 優化
- 存儲引擎選擇
- 列表類型選擇
- 范式
- 慢日志查詢
- 精準時間記錄查詢
- 計劃任務 explain
- 索引
- 索與事務
- 查詢緩存
- 存儲過程
- 觸發器
- 分區
- 分表
- sphinx
- 讀寫分離
- 搜索優化
- 網站靜態化
- Memcache
- Mongodb
- Readis
- php使用redis
- 服務器
- Linux
- 目錄結構
- 常用命令
- VIM編輯器
- 用戶與用戶組
- 權限管理
- 運行級別
- 網絡模式
- ssh
- 軟件安裝
- 計劃任務
- Ubuntu
- 編譯PHP7.3
- 編譯MySQL
- 編譯Nginx
- apache虛擬機配置
- 安裝composer
- Nginx
- Git