RESTful Web 服務 - 面試問題



親愛的讀者,這些RESTful Web 服務面試問題專門設計用於讓您熟悉在RESTful Web 服務主題的求職面試中可能遇到的問題型別。根據我的經驗,優秀的面試官在面試過程中很少計劃要問任何特定的問題,通常問題會從該主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行。

REST 代表 REpresentational State Transfer(表述性狀態轉移)。

REST 是一種基於 Web 標準的架構,使用 HTTP 協議進行資料通訊。它圍繞資源展開,其中每個元件都是一個資源,並且可以透過使用 HTTP 標準方法的通用介面訪問資源。REST 最初由 Roy Fielding 於 2000 年提出。

在 REST 架構中,REST 伺服器只需提供對資源的訪問,而 REST 客戶端訪問和呈現資源。此處,每個資源都由 URI/全域性 ID 標識。REST 使用各種表示形式來表示資源,例如文字、JSON 和 XML。如今,JSON 是 Web 服務中使用最廣泛的格式。

以下眾所周知的 HTTP 方法在基於 REST 的架構中常用:

  • GET - 提供對資源的只讀訪問。

  • PUT - 用於更新/替換新資源。

  • DELETE - 用於刪除資源。

  • POST - 用於更新現有資源或建立新資源。

  • OPTIONS - 用於獲取資源上支援的操作。

Web 服務是一組用於在應用程式或系統之間交換資料的開放協議和標準。用各種程式語言編寫並在各種平臺上執行的軟體應用程式可以使用 Web 服務透過計算機網路(如網際網路)交換資料,其方式類似於單個計算機上的程序間通訊。

基於 REST 架構的 Web 服務稱為 RESTful Web 服務。這些 Web 服務使用 HTTP 方法來實現 REST 架構的概念。RESTful Web 服務通常定義一個 URI(統一資源識別符號)服務,提供資源表示形式(例如 JSON)和一組 HTTP 方法。

REST 架構將每個內容都視為資源。這些資源可以是文字檔案、html 頁面、影像、影片或動態業務資料。REST 伺服器只需提供對資源的訪問,而 REST 客戶端訪問和修改資源。此處,每個資源都由 URI/全域性 ID 標識。

REST 使用各種表示形式來表示資源,其中包括文字、JSON、XML。XML 和 JSON 是最流行的資源表示形式。

在 RESTful Web 服務中設計資源表示格式時,需要考慮以下要點:

  • 可理解性 - 伺服器和客戶端都應該能夠理解和利用資源的表示格式。

  • 完整性 - 格式應該能夠完整地表示資源。例如,資源可以包含另一個資源。格式應該能夠表示資源的簡單和複雜結構。

  • 可連結性 - 資源可以與另一個資源連結,格式應該能夠處理這種情況。

RESTful Web 服務使用 HTTP 協議作為客戶端和伺服器之間通訊的媒介。

客戶端以 HTTP 請求的形式傳送訊息,伺服器以 HTTP 響應的形式進行響應。此技術稱為訊息傳遞。這些訊息包含訊息資料和元資料,即有關訊息本身的資訊。

HTTP 請求有五個主要部分:

  • 謂詞 - 指示 HTTP 方法,例如 GET、POST、DELETE、PUT 等。

  • URI - 統一資源識別符號 (URI),用於標識伺服器上的資源。

  • HTTP 版本 - 指示 HTTP 版本,例如 HTTP v1.1。

  • 請求頭 - 包含 HTTP 請求訊息的元資料,以鍵值對的形式表示。例如,客戶端(或瀏覽器)型別、客戶端支援的格式、訊息正文的格式、快取設定等。

  • 請求正文 - 訊息內容或資源表示。

HTTP 響應有四個主要部分:

  • 狀態/響應程式碼 - 指示伺服器對請求資源的狀態。例如,404 表示資源未找到,200 表示響應正常。

  • HTTP 版本 - 指示 HTTP 版本,例如 HTTP v1.1。

  • 響應頭 - 包含 HTTP 響應訊息的元資料,以鍵值對的形式表示。例如,內容長度、內容型別、響應日期、伺服器型別等。

  • 響應正文 - 響應訊息內容或資源表示。

定址是指定位伺服器上的資源或多個資源。它類似於查詢一個人的郵政地址。

URI 代表統一資源識別符號。REST 架構中的每個資源都由其 URI 標識。

URI 的作用是在託管 Web 服務的伺服器上定位資源。

URI 格式如下:

<protocol>://<service-name>/<ResourceType>/<ResourceID>

謂詞標識要對資源執行的操作。

在設計 URI 時,需要考慮以下要點:

  • 使用複數名詞 - 使用複數名詞來定義資源。例如,我們使用 users 來標識使用者作為資源。

  • 避免使用空格 - 使用下劃線 (_) 或連字元 (-) 在使用長資源名稱時,例如,使用 authorized_users 而不是 authorized%20users。

  • 使用小寫字母 - 儘管 URI 不區分大小寫,但最好只使用小寫字母。

  • 保持向後相容性 - 由於 Web 服務是公共服務,因此一旦公開的 URI 應始終可用。如果 URI 得到更新,請使用 HTTP 狀態程式碼 300 將舊 URI 重定向到新 URI。

  • 使用 HTTP 謂詞 - 始終使用 HTTP 謂詞(如 GET、PUT 和 DELETE)來對資源執行操作。在 URI 中使用操作名稱是不好的做法。

根據 REST 架構,RESTful Web 服務不應該在伺服器上保留客戶端狀態。此限制稱為無狀態性。客戶端有責任將其上下文傳遞給伺服器,然後伺服器可以儲存此上下文以處理客戶端的後續請求。例如,伺服器維護的會話由客戶端傳遞的會話識別符號標識。

RESTful Web 服務中無狀態性的好處如下:

  • Web 服務可以獨立處理每個方法請求。

  • Web 服務無需維護客戶端之前的互動。它簡化了應用程式設計。

  • 由於 HTTP 本身就是一種無狀態協議,因此 RESTful Web 服務可以與 HTTP 協議無縫協作。

RESTful Web 服務中無狀態性的缺點如下:

如果需要處理客戶端互動,Web 服務需要在每個請求中獲取額外資訊,然後進行解釋以獲取客戶端的狀態。

冪等操作意味著無論這些操作被呼叫多少次,其結果都將始終相同。

PUT 和 DELETE 操作是冪等的。

GET 操作是隻讀且安全的。

PUT 和 POST 操作幾乎相同,區別僅在於結果,其中 PUT 操作是冪等的,而 POST 操作可能導致不同的結果。

它應該列出 Web 服務中支援的操作,並且應該是隻讀的。

它應該只返回 HTTP 標頭,不返回正文,並且應該是隻讀的。

快取是指將伺服器響應儲存在客戶端本身中,以便客戶端無需反覆向伺服器請求相同的資源。伺服器響應應包含有關如何執行快取的資訊,以便客戶端在一段時間內快取響應或永遠不快取伺服器響應。

Date 標頭提供資源建立時的日期和時間。

Last Modified 標頭提供資源上次修改時的日期和時間。

Cache-Control 是控制快取的主要標頭。

Expires 標頭設定快取的過期日期和時間。

Public 指令指示資源可由任何元件快取。

Private 指令指示資源只能由客戶端和伺服器快取,任何中間代理都不能快取資源。

no-cache/no-store 指令指示資源不可快取。

max-age 指令指示快取有效期最長為 max-age 秒。在此之後,客戶端必須發出另一個請求。

must-revalidate 指令指示伺服器在 max-age 過期後重新驗證資源。

始終將靜態內容(如影像、css、JavaScript)設定為可快取,並設定 2 到 3 天的過期日期。切勿設定過高的過期日期。

動態內容應僅快取幾個小時。

由於 RESTful Web 服務使用 HTTP URL 路徑,因此以與保護網站相同的方式保護 RESTful Web 服務非常重要。以下是在設計 RESTful Web 服務時應遵循的最佳實踐:

  • 驗證 - 在伺服器上驗證所有輸入。保護您的伺服器免受 SQL 或 NoSQL 注入攻擊。

  • 基於會話的身份驗證 - 使用基於會話的身份驗證來在每次向 Web 服務方法發出請求時對使用者進行身份驗證。

  • URL 中不包含敏感資料 - 切勿在 URL 中使用使用者名稱、密碼或會話令牌,這些值應透過 POST 方法傳遞給 Web 服務。

  • 限制方法執行 - 限制使用 GET、POST、DELETE 等方法。GET 方法不應能夠刪除資料。

  • 驗證格式錯誤的 XML/JSON - 檢查傳遞給 Web 服務方法的輸入是否格式良好。

  • 丟擲通用錯誤訊息 - Web 服務方法應使用 HTTP 錯誤訊息(例如 403)來顯示訪問被禁止等資訊。

HTTP 狀態碼是標準程式碼,指的是伺服器上已完成任務的預定義狀態。例如,HTTP 狀態 404 表示伺服器上不存在請求的資源。

表示“OK”,表示成功。

表示“已建立”,當使用 POST 或 PUT 請求成功建立資源時。使用 location 頭返回新建立資源的連結。

表示“無內容”,例如 DELETE 請求時響應主體為空。

表示“未修改”,用於在條件 GET 請求的情況下減少網路頻寬使用。響應主體應為空。標頭應包含日期、位置等資訊。

表示“錯誤請求”,表示提供了無效的輸入,例如驗證錯誤、資料缺失。

表示“未授權”,表示使用者無權訪問正在使用的方法,例如在沒有管理員許可權的情況下刪除訪問。

表示“未找到”,表示方法不可用。

表示“衝突”,表示在執行方法時發生衝突情況,例如新增重複條目。

表示“內部伺服器錯誤”,表示伺服器在執行方法時丟擲了一些異常。

JAX-RS 代表 JAVA API for RESTful Web Services。JAX-RS 是一個基於 JAVA 的程式語言 API 和規範,用於提供對建立 RESTful Web 服務的支援。其 2.0 版本於 2013 年 5 月 24 日釋出。JAX-RS 大量使用 Java SE 5 中提供的註解來簡化基於 JAVA 的 Web 服務建立和部署。它還提供對建立 RESTful Web 服務客戶端的支援。

接下來是什麼?

接下來您可以回顧一下您之前完成的與該主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您能回答非常複雜的問題,而是需要您將基本概念掌握牢固。

其次,如果您無法回答一些問題,實際上並不重要,重要的是您回答的任何問題都必須充滿自信。所以在面試時要充滿自信。Tutorialspoint 祝您面試順利,並祝您未來的工作一切順利。乾杯 :-)

restful_questions_answers.htm
廣告