RESTful JSON Web服務最佳實踐

2021-01-15 IT168

  【IT168 資訊】Collaxa BPEL產品-後來成為Oracle SOA戰略核心的一部分-背後的關鍵人物之一,Edwin Khodabakchian,已經單獨致力於Feedly這一「將twitter和Google Reader編織成雜誌一般的體驗」的項目好幾年了。最近Edwin發布了一本關於構建基於JSON的Web服務最佳實踐的cookbook。當然這還在進行當中,但現有提供的指南包括了:

  第一階段-定義一個簡單的資源/服務 | 選一個示例資源比如客戶信息,用JSON來對其建模。構建一個簡單的servlet,以PUT來創建一個新客戶,以GET基於客戶鍵值返回客戶信息,以DELETE刪除客戶,以POST更新客戶信息。保證PUT返回的是關於新創建資源URL的正確信息。在我們的案例中,我們有一個將JSON映射到Java模型的框架,使用Hibernate在MySQL資料庫中對這一模型作持久化存儲。這一階段的關鍵是,用JSON正確的表示,並且基本url要有簡單整潔的格式。
還有:

  第三階段-加入驗證 | 修改你的服務實現為通過PUT和POST所收到的JSON資源加入一些數據驗證。學會如何使用HHTP錯誤代碼來定義和轉移異常信息。學會如何在客戶端處理這些異常。這一階段的關鍵是保證你知道現在的HTTP錯誤代碼,在適當的時候重用它們,並且在需要的時候創建符合於HTTP的新代碼。

  現在正在著述中的有7個不同的階段,其範圍從我們提到的第一個,到認證,到生命周期。看到來自現實經驗的指南一直都是非常棒,而且Edwin試圖覆蓋到在過去毫無疑問曾給它帶來困難的問題,比如:

  有很多庫可用以幫助你抽象XMLHTTPRequest。選擇一個可以跨瀏覽器的。選擇一個足夠透明,能讓你看到你所調用的GET,POST,PUT和DELETE操作的。或者:

  為業務事件定義合適的粒度和合適的類型不是那麼容易。你也許需要幾次的迭代才能把它做好。我的建議是不要過度設計:儘量保持簡單並且出現新用例時進行重構。

  對於REST許多其支持者認為是理所當然的方面 ,當然也作出了參考,比如:

  第五階段-添加緩存 | Web基礎設施提供了豐富的緩存機制(最後修改信息,緩存持續期,eTag)。學習機制並看看你是否能利用它們來提升服務的性能與伸縮性。

  Edwin同時還涉及了一些非常實踐的方案,這些方案也許乍一看是有背於REST/HTTP原則的:

  一些伺服器不允許DELETE,這一種情況下你得學會如何用方法重寫來POST。

  根據 Edwin的說法,他們正在考慮將其後端的一些基礎設施開源出來。在些之前 FriendFeed API 的文檔是可獲得的。隨著JSON+REST的逐漸流行,這必將是本有趣的cookbook,以供開發者考慮和利用。

相關焦點

  • RESTful API簡述
    5xx:伺服器錯誤5xx狀態碼表示服務端錯誤。一般來說,API 不會向用戶透露伺服器的詳細信息,所以只要兩個狀態碼就夠了。500 Internal Server Error:客戶端請求有效,伺服器處理時發生了意外。503 Service Unavailable:伺服器無法處理請求,一般用於網站維護狀態。
  • api框架 web 最好的go_golang api框架 - CSDN
    服務。當然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。restful路由gin的路由來自httprouter庫。提供的服務通常是client和server的交互。
  • 就能學會以太坊 JSON API 基礎知識!
    作者 | Nicolas Schapeler責編 | Carol出品 | 區塊鏈大本營(ID:blockchain_camp)前幾天,作者遇到了這樣一種情況,需要在一個讓web3.py幾乎不可能工作的環境中使用Python與Ethereum網絡進行通信。
  • 武漢Python Web全棧開發工程師修煉價格_web前端開發培訓哪家好...
    【課程介紹】課程以python語言為主導,進行web服務相關的全棧開發,包含後端伺服器開發,部署,監控;web前端開發,前後端不分離模板模式開發,前後端分離,單獨前端部署方案。3.supervisor 伺服器進程監控管理4.nginx 負載均衡5.擴展知識:如restful的基本介紹,http,https的介紹前端:1.html入門 (含基礎元素講解)2.css 入門 (含基礎樣式講解)3.javascript入門 (含基礎語法講解)4.jquery入門 (含基礎語法
  • Serverless 在 SaaS 領域的最佳實踐
    看 Serverless 顛覆編程教育的創新實踐》中,已經對 Serverless 的概念做過闡述了,並且也介紹了 Serverless 函數計算(FC)的概念和實踐。這篇文章中介紹一下構建系統靈活性的核心要素服務編排—— Serverless 工作流。Serverless 工作流是一個用來協調多個分布式任務執行的全託管雲服務。
  • Springmvc框架對json的支持 Java程式設計師必看
    json是一種前後端分離思想所使用的存儲數據的格式,然而使用Springmvc這個框架在對前臺參數處理時會遇到很多坑,下面我們就模擬一下前臺發送json數據看springmvc能否成功接收。路徑當做請求處理了,於是我們必須不讓他處理這個請求,讓它對靜態資源放行需要進行如下配置在web.xml中我們添加幾條通過名為default的servlet處理的url-pattern,分別對應js和css文件。
  • 「每日github」6:restful接口mock工具:json-server|K8s上榜等
    Next.js是一個輕量級的 React 服務端渲染應用框架。宣傳的目標是使react應用更簡單。2,moment / momentmoment.js是一個JavaScript的時間日期處理類庫。這個庫還是相當好用的,各種時間日期顯示操作功能齊全,且有多語言支持。
  • 如何使用WebAssembly將命令行JSON處理工具JQ移植到瀏覽器?
    Aboukhalil: 我最初研究 WebAssembly 是為了加快一個分析 DNA 測序數據 Web 工具的速度,我曾經在 Smashing 雜誌上寫過相關文章 :https://www.smashingmagazine.com/2019/04/webassembly-speed-web-app   遇到的最大的挑戰是
  • (建議收藏)|Spring Boot集成JSON Web Token(JWT)
    ,以方便用戶下次請求的鑑別,通常而言session都是保存在內存中,而隨著認證用戶的增多,服務端的開銷會明顯增大。1.3.4 jwt的特點因為json的通用性,所以JWT是可以進行跨語言支持的,像JAVA,JavaScript,NodeJS,PHP等很多語言都可以使用。因為有了payload部分,所以JWT可以在自身存儲一些其他業務邏輯所必要的非敏感信息。
  • 利用yii2和swagger打造完美的RestFul Api接口
    我們不希望url在訪問時,還需要輸入index.php這樣的結構,而是希望直接訪問 控制器名/方法名 這樣的結構,所以,我們需要配置:config下面的web.php裡面的components組件:'urlManager' => ['enablePrettyUrl' => true,'showScriptName' => false
  • JSON對象和簡單練習
    1環境搭建在使用JSON對象之前,我們需要提前下載幾個jar包,拷貝到java web工程下的\WEB-INF\lib\路徑下以下這幾個jar包可以到maven倉庫下載,我這裡也貼出來了這幾個下載地址。
  • 全棧AI工程師指南,DIY一個識別手寫數字的web應用
    第四篇 介紹前端web單頁應用的開發。,並且可以利用web的任何交互方式。= model.to_json() open('my_model_architecture.json','w').write(json_string) model.save_weights('my_model_weights.h5') 第二篇
  • 用Scala實現簡單的Web和API伺服器
    這篇文及章的目的是介紹怎樣用Scala實現簡單的HTTP伺服器,從而提供網頁服務,以響應API請求。我們會建立一個簡單的聊天網站,可以讓用戶發表聊天信息,其他訪問網站的用戶都可以看見這些信息。為簡單起見,我們將忽略認證、性能、用戶掛曆、資料庫持久存儲等問題。
  • 程式設計師:JSON、JSONObject 與 JSONArray 簡單講解
    JSONObject drug = new JSONObject();drug.put("drugName", "鹽酸丁卡因注射液");JSONArray array = new JSONArray();array.add(person);array.add(drug);Fastjson 的簡單應用將對象轉換為json
  • rpc、json Rpc和http區別
    帶索引數組參數的rpc調用--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}<-- {"jsonrpc": "2.0", "result": 19, "id": 1} 2.