python3-开发进阶-RESTful 软件架构风格
一. 什么是RESTful?
- REST與技術無關,代表的是一種軟件架構風格,REST是Representational State Transfer的簡稱,中文翻譯為“表征狀態轉移”
- REST從資源的角度類審視整個網絡,它將分布在網絡中某個節點的資源通過URL進行標識,客戶端應用通過URL來獲取資源的表征,獲得這些表征致使這些應用轉變狀態
- 所有的數據,不過是通過網絡獲取的還是操作(增刪改查)的數據,都是資源,將一切數據視為資源是REST區別與其他架構風格的最本質屬性
- 對于REST這種面向資源的架構風格,有人提出一種全新的結構理念,即:面向資源架構(ROA:Resource Oriented Architecture)
總結:一切皆資源
二. RESTful API設計
- API與用戶的通信協議,總是使用HTTPs協議。
- 域名?
- https://api.example.com? ? ? ? ? ? ? ? ? ? ? ? ?盡量將API部署在專用域名(會存在跨域問題)
- https://example.org/api/? ? ? ? ? ? ? ? ? ? ? ? API很簡單
- 版本
- URL,如:https://api.example.com/v1/
- 請求頭? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 跨域時,引發發送多次請求
- 路徑,視網絡上任何東西都是資源,均使用名詞表示(可復數)
- https://api.example.com/v1/zoos
- https://api.example.com/v1/animals
- https://api.example.com/v1/employees
- method
- GET? ? ? :從服務器取出資源(一項或多項)
- POST? ? :在服務器新建一個資源
- PUT? ? ? :在服務器更新資源(客戶端提供改變后的完整資源)
- PATCH? :在服務器更新資源(客戶端提供改變的屬性)
- DELETE :從服務器刪除資源
- 這么看不夠明顯?
- 我們有這樣幾個url
books? ? ? ? ? ? ? ? - -------> books? ? ? ? ? ? 查看
book/add/? ? ? ? ? ? ------->addbooks? ? ? ?添加
book/1/change? ?-------->changebook? ?修改
book/1/delete? ? --------->changebook? ?刪除
RESTful:
? ? ? ? ? ? get? ? ? ? ? ? ? 查看
books -------------------->
post? ? ? ? ? ? 添加
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? get? ? ? ? ?查看
book/1/-------------------->? ? ? put? ?更新
delete? ? ? ?刪除
- 過濾,通過在url上傳參的形式傳遞搜索條件
- https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
- https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
- https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
- https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序
- https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
- 狀態碼
- 錯誤處理,狀態碼是4xx時,應返回錯誤信息,error當做key。
- 返回結果,針對不同操作,服務器向用戶返回的結果應該符合以下規范。
- Hypermedia API,RESTful API最好做到Hypermedia,即返回結果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應該做什么。
摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html?
更多專業前端知識,請上 【猿2048】www.mk2048.com
總結
以上是生活随笔為你收集整理的python3-开发进阶-RESTful 软件架构风格的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器内核总结
- 下一篇: python编写姓名年龄_python小