在現在這個時代,很常看到 RESTful,SOAP是什麼肥皂洗香香嗎🤔?原來還有一種叫做 … RPC ㄡ …
SOAP (Simple Object Access Protocol) - 簡單物件存取協定
咱們維基百科敘述的:
此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,並得到IBM、蓮花(Lotus)、康柏(Compaq)等公司的支援,於2000年提交給全球資訊網聯盟(World Wide Web Consortium,W3C),目前SOAP 1.1版是業界共同的標準,屬於第二代的XML協定。
當初是為了解決不同語言簡易溝通使用比 RESRful 早一點時代的東西 。
現在不同語言的溝通方式其實也不只有 RESTful,像是現在最夯的gRPC也是可以溝通的協定。
RESTful (Representational state transfer) - 表現層狀態轉換
最常見就是 Web Server 咱們維基百科
- Uniform Interface:統一介面。
- Stateless:無狀態。
- Cacheable:可快取。
- Client-Server:客戶伺服器分離模式,任何一個客戶端與伺服器都是可替換的。
- Layered System:分層的系統,客戶端不知道他聯絡的是不是最終伺服器。
- Code on Demand(可選):伺服器可以將能力擴充到客戶端,如果客戶端可以執行的話。這個功能是可選擇的。
SOAP vs RESTful
SOAP | RESTful |
---|---|
SOAP 是一種協議,RESTful是一種架構 | REST 可以利用 SOAP 作為 Web 服務的底層協議,因為它歸根結底只是一種架構模式。 |
XML | JSON |
傳輸過程資源較大(格式問題) | 傳輸過程資源極小(格式問題) |
如果我今天拿到一個 SOAP 或 Restful 要怎麼介接,這才是重點吧??要趕上線拉!
RESTful API
由於太常見了,我這邊想直接用文字代替過,很常在客戶端看到這個,不外乎就是用 AJAX 的方式傳送 JSON 與 Server 端口互動。
而且現在蠻常與廠商介接也是用 AJAX
NodeJS 推薦套件
- axios - Client端 或 Server端都非常好用的套件
import axios from 'axios';
axios.post('/user', {firstName: 'Fred',lastName: 'Xu'})
.then((response) => {console.log(response)})
.catch((error) => {console.log(error)});
SOAP
NodeJS 推薦套件
import { Client, createClientAsync } from 'soap';
let client = await createClientAsync(this.url) // createClientAsync 可以建立非同步功能,我個人蠻推薦這種用法的
// SOAPFunction 這個真的是要從廠商那邊去查詢有什麼 Function 才能使用的,每一間廠商都不同
let response = await client.SOAPFunction({firstName: 'Fred',lastName: 'Xu'})
結語
介接方式百百種,遇到SOAP就上網爬爬文查查資料,因為我之前趕著做專案我也用過RESTful的方式用axios去自己組一個XML和廠商交握,結果也拿到資料了,我就以為SOAP是這樣的方式拿資料,結果根本被我亂搞搞通了,其實也是蠻鬧的,後來遇到比較完整的SOAP廠商,就低頭去找套件,爬爬文章這樣,越戰越勇!