主頁 >  其他 > 讀書筆記丨遠程服務呼叫和RESTful,如何分析和抉擇?

讀書筆記丨遠程服務呼叫和RESTful,如何分析和抉擇?

2023-04-27 07:32:51 其他

摘要:相信未來REST規范將會變得更加流行和普及,

本文分享自華為云社區《云原生時代,遠程服務呼叫和RESTful,如何分析和抉擇?》,作者:breakDawn ,

隨著云原生的概念越來越火,服務的架構應該如何發展和演進,成為很多程式員關心的話題,大名鼎鼎的《深入理解java虛擬機》一書作者于21年推出了新作《鳳凰架構》,從這本書中可以看到當前時下很多最新的技識訓者理念,

本博文將沉淀發布這本書的學習筆記和思考, 如果希望了解更加詳細的內容,歡迎購買該書繼續詳細學習,

訪問遠程服務

1 遠程服務呼叫

這一個章節主要講解rpc的設計理念和發展歷史,
先是講解了IPC(行程間通信)所需要的各個必要因素
接著解釋RPC 是IPC的一種特例(這是最初科學家們的想法)
但PRC存在很多可靠性的問題,并不能直接等同IPC的擴展,

接著提出了RPC的三個基本問題:

  1. 如何表示資料
    即序列化協議, 有grpc的proto-buffer、json、xml、java-rmi基于java自帶序列化之列的
  2. 如何傳遞資料
    基于什么網路協議傳輸
    java-rmi的遠程協議
    JSON-RPC協議
    SOAP協議(web service 簡單對下訪問)
  3. 如何表示方法
    如何定義方法,如何在不同語言、不同系統環境中保證 方法簽名唯一,
    需要對介面描述定義語言有一個選型

再后面講解了rpc的發展歷史
CORBA的使用過于復雜,被拋棄
SOAP使用xml很簡單,但是性能奇差
可以看出RPC想同時滿足簡單、普適、高性能是很難的
于是得出一個結論:

不存在完美的RPC框架

最近幾年的RPC框架更傾向于往高層次、插件化發展,
即不再獨立解決RPC的所有問題,而是提供一些擴展點由用戶自己選擇(比如dubbo)
可以任意切換json或者fastjson等序列化方式
可以切換傳輸協議等,

2 REST

rest并不是一種遠程呼叫協議, 他只能說是一種風格,
REST的傳輸效率提升潛力有限,但是可以簡化呼叫,

2.1 REST核心概念(基于HTTP超文本傳輸協議)

  • 資源
    資源指你希望獲取或者修改的東西、資訊本身,他的表現形式可以不同,但是里子是相同的
  • 表征
    就是表現資源的形式,用html還是pdf來回傳
  • 狀態
    指的是服務端對某次會話是否持有狀態,
    例如讀下一篇文章時,當前文章id由服務端存盤還是瀏覽器存盤,這就是有狀態和無狀態的區別,
  • 轉移
    就是服務端提供的行為邏輯, 通常叫做 資源的轉移
  • 統一介面
    就是HTTP協議里提供的GET\HEAD\POST\PUT\DELETE\TRACE\OPTIONS這七種操作,通過這些操作觸發轉移
  • 超文本驅動
    瀏覽器的行為經常是通過服務端回傳的url或者各種資訊觸發了驅動行為
  • 自描述訊息
    為了方便客戶端識別表征,回傳類似于Content-Type等內容,方便用何種字符集處理

2.2 REST核心設計原則

  1. 客戶端與服務端分離
    服務端不處理渲染, 由客戶端來處理
  2. 無狀態
    盡可能希望服務端不要存盤rest會話狀態,達到分布式的高價值回報,
    但是不太可能特別是客戶端持有會話數量級很大的情況下,所以仍舊會持有一定狀態
  3. 可快取
    服務端的應答中要直接或者間接告知客戶端是否可以快取,快取多久
  4. 分層系統
    客戶端不需要知道是否真的連接到了最終的服務器
    代表是CDN內容分發網路
  5. 統一介面
    面向資源編程
    系統設計時聚焦在資源而不是行為上
    例如面向行為時, 登錄就是login介面,注銷就是logout介面
    而面向資源時,登錄就是PUT Session, 注銷就是DELETE Session
  6. 按需代碼
    客戶端的代碼可以有一部分讓服務端發回進行裝載,

2.3 REST的好處

  • 降低服務介面的學習成本
  • 資源天然具有集合與層次介面
    這樣很多資源可以很容易組合在一起并讓使用者想到介面url是什么
    例如獲取 用戶 icyfenix的購物車中的第2本書,這個是有層次的,那么介面就是GET /user/icyfenix/cart/2
  • REST系結于HTTP協議,HTTP又是大家非常熟悉的

2.4 RMM(Richardson提出的restful成熟度模型)

第0級:完全不rest

提供的api定義里總是包含了各種動作,例如
/queryXXX
/applyXXX
類似于RPC的行為介面
壞處是一旦要提供其他對XXX的操作,必須重新撰寫介面,無法對XXX的查詢能力進行復用!

第1級:開始引入資源的概念

api的endpoint定義應該圍繞名詞+資源id而不是動詞來定義,
POST /doctors/mjones 獲取醫生的檔期
POST /schedules/{id} 觸發對這個id的調度

第2級: 引入統一介面,映射到HTTP方法上

上面的method都是POST,實際上可以把HTTP方法的method、回傳碼都給利用上

  • 對一個資源的增加用POST,洗掉用DELETE,更新用PUT
  • 依賴HTTP的回傳碼定義資源可能的例外情況,例如201代表創建成功,409代表沖突(被人搶先預約)
  • 利用HTTP自帶的認證和授權資訊,

第3級:超文本控制,轉移行為通過回應控制

第2級里, 所有介面的定義仍然需要使用者自己查詢檔案來記憶和應用
實際上應該只需要一個操作起始入口, 例如獲取醫生的檔期介面
這個介面要回傳的body里,已經告知了對應資源的名稱,例如檔期資源的key就叫做schedules
那么就能馬上知道下一個介面查詢用schedules了!
這樣代碼里可以做好適配,當你要把檔期的key名做修改時,客戶端代碼根本不用變動!

2.2.4 REST的不足和爭議

1.restful面向資源編程只適合做CRUD,不適合過于復雜的業務邏輯

  • 面向程序編程,以演算法和處理程序為中心,這符合計算機世界中主流的互動方式
  • 面向物件編程,將資料和物件行為統一起來,因為這符合現實世界的主流互動方式
  • 面向資源編程,資料作為主體,行為看成統一介面,為了符合網路世界的主流互動方式

2.rest不利于事務支持
作者不同意這個觀點, 認為不會有阻礙,取決于系統的事務設計

3.rest沒有傳輸可靠性支持
雖然確實沒有類似于重發等機制的保證,但rest介面一般盡可能要求冪等性,來做到應用代碼做重發時可以不用擔心重復的問題

4.缺少對資源做部分或者批量處理的能力
rest語意里不能涵蓋這種情況,得定義特殊的介面或者引數,那么低3級里面就不能涵蓋了,

相關思考

基于REST的規范,呼叫者可以非常快速地理解自己需要的介面內容是什么樣的,例如華為云當前的很多云服務公開介面都會基于REST理念進行開放, 并且各云服務的開放介面都會集成到API Explorer和華為云SDK中心供開發者直接呼叫,這些平臺提供了豐富的介面檔案和示例代碼,幫助開發者更快地上手和使用 REST 介面,

相信未來REST 規范將會變得更加流行和普及,隨著云計算和大資料技術的不斷發展,REST 介面將會被廣泛應用于各種領域,例如醫療、金融、電商等,REST 介面的開放性、可擴展性和易用性,將會為開發者帶來更加高效、便捷和可靠的開發體驗,

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551296.html

標籤:其他

上一篇:位元組超全學習流程圖流出,100天漲薪10k,從功能測驗到自動化測驗

下一篇:返回列表

標籤雲
其他(158180) Python(38107) JavaScript(25394) Java(18001) C(15217) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7148) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5329) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4562) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2431) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1960) Web開發(1951) HtmlCss(1927) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1855) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 讀書筆記丨遠程服務呼叫和RESTful,如何分析和抉擇?

    摘要:相信未來REST規范將會變得更加流行和普及。 本文分享自華為云社區《云原生時代,遠程服務呼叫和RESTful,如何分析和抉擇?》,作者:breakDawn 。 隨著云原生的概念越來越火,服務的架構應該如何發展和演進,成為很多程式員關心的話題。大名鼎鼎的《深入理解java虛擬機》一書作者于21年 ......

    uj5u.com 2023-04-27 07:32:51 more
  • 位元組超全學習流程圖流出,100天漲薪10k,從功能測驗到自動化測驗

    今年年初,由于經濟壓力讓我下定決心進階自動化測驗,已經24的我做了3年功能測驗,坐標廣州薪資定格在8k,可能是生活過的太安逸,覺得8000的工資也夠了。
    努力終究是有回報的,在前幾天跳槽成功工資到達了一個新高12k,雖然比不上一些社會精英,但是我也滿足了,經過此次事見之后,我也相信我的工資絕不會止步... ......

    uj5u.com 2023-04-27 07:32:36 more
  • 支撐百萬商戶、千億級呼叫:微盟如何通過鏈路設計降本40%?

    一分鐘精華速覽 在典型的分布式系統中,用戶的一個請求到達組合的前端服務后,前端服務會分發請求到內部的各個服務,每次呼叫都涉及跨系統的一次請求和一次回應。在有大規模、高并發請求量的系統中,如何標識這些請求及存盤這些呼叫資訊,并形成呼叫鏈?如果系統的某兩個服務間出了問題,又如何為業務方提供可視化的展現形 ......

    uj5u.com 2023-04-27 07:31:39 more
  • 億級榷訓業務穩如磐石,華為云CodeArts PerfTest發布

    摘要:近日,華為云性能測驗服務CodeArts PerfTest全新上線,提供低門檻、低成本的一站式云化性能測驗解決方案。 本文分享自華為云社區《億級榷訓業務穩如磐石,華為云CodeArts PerfTest發布》,作者:華為云頭條 。 計算機軟體作為人類邏輯智慧的偉大結晶之一,已經滲透到了人類社會 ......

    uj5u.com 2023-04-27 07:30:59 more
  • SRC相關知識分享

    SRC是企業采用眾測的方式,將企業內部的部分系統開發出來,供社會上散布的白帽子黑客進行滲透測驗,通過獎金和榮譽等激勵措施,鼓勵白帽在黑客在SRC平臺上傳漏洞,以此獲取實時的漏洞,進而第一時間修復漏洞。 ......

    uj5u.com 2023-04-27 07:30:33 more
  • Vulnhub之Hacksudo Thor靶機詳細測驗程序(提權成功)

    Hacksudo Thor 作者:jason huawen 靶機資訊 名稱:hacksudo: Thor 地址: https://www.vulnhub.com/entry/hacksudo-thor,733/ 識別目標主機IP地址 (kali?kali)-[~/Desktop/Vulnhub/Ha ......

    uj5u.com 2023-04-27 07:30:07 more
  • 記一次某應用虛擬化系統遠程代碼執行

    微步在線漏洞團隊通過“X漏洞獎勵計劃”獲取到瑞友天翼應用虛擬化系統遠程代碼執行漏洞情報(0day),攻擊者可以通過該漏洞執行任意代碼,導致系統被攻擊與控制。瑞友天翼應用虛擬化系統是基于服務器計算架構的應用虛擬化平臺,它將用戶各種應用軟體集中部署到瑞友天翼服務集群,客戶端通過WEB即可訪問經服務器上授... ......

    uj5u.com 2023-04-26 09:08:52 more
  • 記一次某應用虛擬化系統遠程代碼執行

    微步在線漏洞團隊通過“X漏洞獎勵計劃”獲取到瑞友天翼應用虛擬化系統遠程代碼執行漏洞情報(0day),攻擊者可以通過該漏洞執行任意代碼,導致系統被攻擊與控制。瑞友天翼應用虛擬化系統是基于服務器計算架構的應用虛擬化平臺,它將用戶各種應用軟體集中部署到瑞友天翼服務集群,客戶端通過WEB即可訪問經服務器上授... ......

    uj5u.com 2023-04-26 08:58:28 more
  • Midjourney的一些學習心得:如何高效的圖生圖

    注意本文沒有什么長篇大論,全部是自己的學習心得。 心得體會:如何圖生圖 今天在一篇midjourney看到好圖應該怎么抄。 相信經常會看到好圖也想要的,但是要么抄不出感覺,要么抄過來把水印也抄了,這一篇給你說清楚。 我們知道,AI 繪畫的核心就是給他怎么樣的Prompt 。 然而想讓Midjourn ......

    uj5u.com 2023-04-26 07:54:56 more
  • 棋盤覆寫問題——分治法

    問題描述 有一個 x (k>0)的棋盤,恰好有一個方格與其他方格不同,稱之為特殊方格。現在要用如下圖所示的L形骨牌覆寫除了特殊方格以外的其他全部方格,骨牌可以任意旋轉,并且任何兩個骨牌不能重復。請給出一種覆寫方式。 樣例: 輸入: 輸出: 思路——分治法: 將一個規模為n的問題分解為k個規模較小的子 ......

    uj5u.com 2023-04-26 07:54:45 more