簡體   English   中英

REST api 和 REST 服務器有什么區別

[英]What is difference between REST api and REST server

我對此有點困惑。 我可以調用我的 Java 服務器 REST 服務器還是應該調用它 REST Z8A5DA52ED1264417D35AZ7E? 什么是正確的術語? 你什么時候可以打電話給 REST api 什么時候打電話給 REST 服務器?

謝謝

In simple terms a REST API is a set of URL s that respond to requests made over HTTP , usually using GET POST PUT DELETE HTTP methods. 許多REST API在響應中返回JSON

例如,要獲取客戶的詳細信息, REST API可能是一個GET請求:

https://customers.com/api/1234

回應:

{
  "id": 1234,
  "name": "Joe Bloggs"
}

REST API部分是/api/1234 可用於簡化REST API的創建的框架示例是spring-boot

REST 服務器部分是https://customers.com

REST Server提供基礎設施,允許客戶端向REST API發送GET請求並接收響應。

可用作 REST 服務器的示例有Apache HTTPDTomcatZ52766ACF461B5ECB27等。

回答一些問題:

我應該使用 REST API 而不是服務器

REST API不能在沒有Rest Server的情況下使用。 服務器是接受對API的請求並促進來自API的響應的應用程序。 REST API客戶端將為customer.com/api/1234REST Server發送GET請求。 The REST Server will work out that 'customer.com/api/1234' is a web application running inside the REST Server and will pass control to that web application.

下一個問題的答案是從那次交接開始的:

REST API分為三層——表現層、業務層和數據層

這完全取決於REST API的開發人員。 這是REST API的實現細節。 例如,典型的流程可能是:

  1. REST Server接收到customer.com/api/1234GET請求
  2. REST Server將控制權交給REST API接收URL路徑1234
  3. REST API確定請求是針對客戶(業務層)
  4. REST API聯系數據庫以加載 id 為 1234 的客戶的數據(數據層)
  5. REST API返回JSON如上所示(表示層)
  6. REST Server向客戶端發送JSON響應

So all domain operations are handled by the REST API (finding a customer, converting the data to JSON) and all internet operations are handled by the REST Server (client connections, HTTP requests and responses).

In the spring-boot framework, you can develop your REST API using Java and also bundle it with a built-in REST Server (Tomcat) so you only produce a single JAR file that you place on a computer and run.

所以實際上,你有三個組件。 計算機(例如連接到 Internet 的 unix 服務器,甚至您的 pc 並使用http://localhost/customer/api/1234 )。 A REST Server (Tomcat, that can accept HTTP requests) and a REST API (the code you wrote to implement the tiers).

API 是一個應用程序編程接口,它是一種為其他應用程序(應用程序之間的通信)提供信息的方式。 服務器是運行某些進程的任何機器,它將為您執行某些服務。

換句話說,不管你怎么稱呼它,重要的部分是當與程序員談論這個時,他們會稱之為API,因為它是與代碼相關的部分。 如果您將其稱為服務器,其他人可能會理解您是在談論機器本身,而不是在其上運行的應用程序。

(這是我作為大企業程序員的願景,我經常看到 IT 人員因為這些小概念而誤解程序員)

REST 實際上是一種建築風格,根據羅伯特 C 的說法。 “鮑勃叔叔”馬丁的架構是關於意圖的 REST 背后的意圖是將客戶端與服務器分離,以允許后者在未來自由發展,而不必擔心破壞客戶端。 為了實現解耦,客戶端和服務器必須遵守一定的約束。

REST 不能單獨減少到服務器端。 決定分布式系統是否遵循 REST 架構設計的是客戶端和服務器之間的整體交互特征或行為。 如果您願意,您可能會從 SOA 的角度來處理它,並說服務器向客戶端提供服務。 即使您實現的服務遵守 Fielding 提出的所有約束,如果客戶端依賴於從 URI 識別語義或期望某些端點返回某些類型而不是依賴於內容類型協商或實現與相應服務器的其他類型的耦合。

Jim Webber指出,在 REST 架構中,您主要實現一個域應用程序協議,當客戶端通過鏈接或類似於 HTML ZAC68B62ABFD6A9FE26E8AC423ZCECE8 的類似形式的表示獲取服務器提供的所有信息時,客戶端將遵循該協議。 這個概念被概括為 HATEOAS。 此外,HTTP 是一種傳輸協議,其域是跨 Web 的文檔傳輸。 你不調用服務,你只是在文件周圍鏟。 您從文件傳輸中得出的任何業務規則只是實際文檔管理的副作用。 因此調用 REST 服務實際上也可能不是正確的術語。

A REST API in itself is misleading in the REST ecosystem as REST is defined to reuse the common interface provided by its transport layer, HTTP in most cases, but it is not limited to it actually. 這里 HTTP 即是客戶端和服務器使用的通用接口,服務器和客戶端都不應該對其進行自定義,這可能會導致互操作性問題。 REST 環境的最終目標是一個客戶端可以與大量開箱即用的服務進行交互,而服務器可以為大量不同的客戶端提供服務,尤其是那些不受開發人員控制的客戶端,而無需外部文檔和定制開銷,除了標准文檔格式的集成,例如 HTML 或其他超文本驅動的媒體類型格式和鏈接關系。 耦合不應該在客戶端和服務器之間,而是在對等點(服務器或客戶端)和由標准化媒體類型定義的協商表示格式之間,盡管通過適當的內容類型協商,服務器和客戶端都同意表示格式既支持和理解。

不幸的是,人們普遍混淆了 REST 到底是什么。 If you look here at SO or on the Web in general you might get the impression that REST means exposing arbitrary JSON payloads via over-engineered URLs on some HTTP endpoints. 此類系統的行為類似於真正的 RPC API,類似於 SOAP 或 CORBA。 他們附帶自己的文檔或類型定義,允許對消息進行反序列化/序列化,如果結構和類似內容發生變化,客戶端通常會中斷,並且針對這些 API 之一的客戶端通常不能被其他 API 重用盒子。 這些是耦合和類 RPC 行為的有力提示。 此類“服務”需要記錄“API”,以便其他開發人員可以實現能夠與這些系統交互的客戶端。 當客戶端需要此類文檔時,文檔成為服務器實現必須遵循的實際事實,否則客戶端可能會停止工作。 這種耦合也意味着服務在未來不能自由發展,因為 API 文檔和實現之間的緊密耦合可能會破壞客戶端。

正如您希望自己看到的那樣,如果您談論 Fielding 提出的真正的 REST 架構 model,那么術語 API 通常有點冒險。 如果您想交流大多數開發人員認為是 REST 但實際上是 RPC 的東西,那么術語 API 可能更合適。 IMO 術語“服務”更准確地涵蓋了服務器公開的內容,因為它准確地涵蓋了這兩個定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM