Go語言實戰 : API服務器 (1) 技術選型

1. API是什么?

API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數或者接口,目的是提供應用程序與開發人員基于某軟件或硬件得以訪問一組例程的能力,而又無須訪問源碼,或理解內部工作機制的細節。——百度百科

2. 怎么實現一個 API 服務器

要實現一個 API 服務器,首先要考慮兩個方面:API 風格和媒體類型。Go 語言中常用的 API 風格是 RPC 和 REST,常用的媒體類型是 JSON、XML 和 Protobuf。在 Go API 開發中常用的組合是 gRPC+ProtobufREST+JSON

3. REST是什么

REST(REpresentational State Transfer),首次出現在 2000 年 Roy Thomas Fielding 的博士論文中,它指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful 的。

  • 資源(Resources),REST 是“表現層狀態轉化”,其實它省略了主語。“表現層”其實指的是“資源”的“表現層”。那么什么是資源呢?我們平時網上訪問到圖片、文字、文檔、多媒體等就是資源,一般通過 URI 來定位。也就是說,一個 URI 就表示一個資源。
  • 表現層(Representation),資源是作為一個具體的實體信息,它可以有多種的展現方式。而把實體展現出來就是表現層。例如一個 txt 文本信息,它可以輸出成 html、json 等。
  • 狀態轉化(State Transfer),訪問一個網站,就代表了客戶端和服務器的一個互動過程。在這個過程中,就涉及到數據和狀態的變化。而 HTTP 協議是無狀態的,那么這些狀態肯定保存在服務器端,所以如果客戶端想要通知服務器端改變數據和狀態的變化,就要通過某種方式來通知它。客戶端能通知服務器端的手段,只能是 HTTP 協議。具體來說,就是 HTTP 協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源(也可以用于更新資源),PUT 用來更新資源,DELETE 用來刪除資源。
    綜上所述,我們總結一下什么是 RESTful 架構:
  1. 每一個 URI 代表一種資源

  2. 客戶端和服務端之間,傳遞這種資源的某種表現層

  3. 客戶端通過四個 HTTP 動詞,對服務端資源進行操作,實現“表現層狀態轉化”

4. RPC又是什么

RPC(Remote Procedure Call Protocol)遠程過程調用協議,是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。它假定某些傳輸協議的存在,如 TCP 或 UDP,以便為通信程序之間攜帶信息數據。通過它可以使函數調用模式網絡化。在 OSI 網絡通信模型中,RPC 跨越了傳輸層和應用層。RPC 使得開發包括網絡分布式多程序在內的應用程序更加容易。

5. REST 還是 RPC

RPC 優點:

  1. 調用簡單,清晰,透明,不用像 rest 一樣復雜,就像調用本地方法一樣簡單

  2. 高效低延遲,性能高

  3. 自定義協議(讓傳輸報文提及更小)

  4. 性能消耗低,高效的序列化協議可以支持高效的二進制傳輸

  5. 自帶負載均衡

RPC 缺點:

  1. 耦合性強
  2. 無法跨語言,平臺敏感

REST優點:

  1. 耦合性低,兼容性好,提高開發效率

  2. 不用關心接口實現細節,相對更規范,更標準,更通用,跨語言支持

REST缺點:

  1. 性能不如 RPC 高

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391375.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391375.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391375.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

天貓客戶端組件動態化方案——VirtualView 工具大更新

前文《天貓客戶端組件動態化的方案——VirtualView 上手體驗》都提到了自定義模板編譯成二進制數據的過程,在 Android 版的 Playground 里內置了一個編譯工具可以實時調測,然而業務開發過程中,不可能在手機上編譯,而是在電腦或者后…

tableau可視化_如何在Tableau中構建自定義地圖可視化

tableau可視化Sometime last year, I got fascinated with bubble charts when I saw a data visualization video, Hans Roslings 200 Countries, 200 Years, 4 Minutes - The Joy of Stats from BBC.去年的某個時候,當我看到一個數據可視化視頻時,我迷…

數據分析和大數據哪個更吃香_處理數據,大數據甚至更大數據的17種策略

數據分析和大數據哪個更吃香Dealing with big data can be tricky. No one likes out of memory errors. ?? No one likes waiting for code to run. ? No one likes leaving Python. 🐍處理大數據可能很棘手。 沒有人喜歡內存不足錯誤。 No?沒有人喜歡等待代碼…

MySQL 數據還原

1.1還原使用mysqldump命令備份的數據庫的語法如下&#xff1a; mysql -u root -p [dbname] < backup.sq 示例&#xff1a; mysql -u root -p < C:\backup.sql 1.2還原直接復制目錄的備份 通過這種方式還原時&#xff0c;必須保證兩個MySQL數據庫的版本號是相同的。MyISAM…

test6

test6 轉載于:https://www.cnblogs.com/Forever77/p/11474320.html

VueJs學習入門指引

新產品開發決定要用到vuejs&#xff0c;總結一個vuejs學習指引。 1.安裝一個Node環境 去Nodejs官網下載windows版本node 下載地址&#xff1a; https://nodejs.org/zh-cn/ 2.使用node的npm工具搭建一個Vue項目&#xff0c;這里混合進入了ElementUI 搭建指引地址: https:…

粒子網格算法 pm_使粒子網格與Blynk一起使用的2種最佳方法

粒子網格算法 pmThis post is originally from my blog on www.jaredwolff.com.這篇文章最初來自我在www.jaredwolff.com上的博客。 Writing an app takes time. It takes even more time to write one that works with hardware.編寫應用程序需要時間。 編寫與硬件兼容的代碼…

python:對list去重

1、set()方法 numbers [1,7,3,2,5,6,2,3,4,1,5] new_numbers list(set(numbers)) print new_numbers 輸出 [1, 2, 3, 4, 5, 6, 7] 特點&#xff1a;不保證原有順序 2、原始方法 numbers [1,7,3,2,5,6,2,3,4,1,5] new_numbers [] for x in numbers:if x not in new_numbers:…

運維工程師如果將web服務http專變為https

1&#xff1a;生成私鑰 2&#xff1a;生成證書簽署請求 3&#xff1a;在提供CA簽署的web網站上&#xff0c;提交生成的證書簽署請求 4&#xff1a;下載已經簽署的CA證書 5&#xff1a;將證書的信息保留在web服務器中&#xff0c;且應用到提供web服務的軟件即可轉載于:https://w…

leetcode 363. 矩形區域不超過 K 的最大數值和

給你一個 m x n 的矩陣 matrix 和一個整數 k &#xff0c;找出并返回矩陣內部矩形區域的不超過 k 的最大數值和。 題目數據保證總會存在一個數值和不超過 k 的矩形區域。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,0,1],[0,-2,3]], k 2 輸出&#xff1a;2 解釋&…

centos7.4二進制安裝mysql

1&#xff1a;下載二進制安裝包&#xff08;安裝時確保沒有mysql數據庫服務器端&#xff09;&#xff1a; mariadb-10.2.12-linux-x86_64.tar.gz、 mariadb-10.2.12.tar.gz。2&#xff1a;創建系統賬號指定shell類型&#xff08;默認自動創建同名的組&#xff09;3&#xff1a;…

批梯度下降 隨機梯度下降_梯度下降及其變體快速指南

批梯度下降 隨機梯度下降In this article, I am going to discuss the Gradient Descent algorithm. The next article will be in continuation of this article where I will discuss optimizers in neural networks. For understanding those optimizers it’s important to…

java作業 2.6

//程序猿&#xff1a;孔宏旭 2017.X.XX /**功能&#xff1a;在鍵盤輸入一個三位數&#xff0c;求它們的各數位之和。 *1、使用Scanner關鍵字來實現從鍵盤輸入的方法。 *2、使用取余的方法將各個數位提取出來。 *3、最后將得到的各個數位相加。 */ import java.util.Scanner; p…

ubuntu 16.04 掛載新硬盤

2、掛載數據盤 mkdir /datausrubuntu:~$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 465.8G 0 disk sda1 8:1 0 512M 0 part /boot/efisda2 8:2 0 464.3G 0 part /sda3 8:3 0 976…

Go語言實戰 : API服務器 (2) 運行流程

1.API服務器的總流程 分為兩步&#xff1a; 啟動API服務器API服務器對HTTP請求進行處理 2.API服務器啟動流程 解析配置文件&#xff0c;利用配置文件完成對服務器的初始化配置初始化logger&#xff0c;開啟日志記錄與數據庫建立連接設置http連接&#xff08;例如設置響應頭…

Linux 命令 之查看程序占用內存

2019獨角獸企業重金招聘Python工程師標準>>> 查看PID ps aux | grep nginx root 3531 0.0 0.0 18404 832 ? Ss 15:29 0:00 nginx: master process ./nginx 查看占用資源情況 pmap -d 3531 top -p 3531 轉載于:https://my.oschina.net/mengzha…

邏輯回歸 自由度_回歸自由度的官方定義

邏輯回歸 自由度Back in middle and high school you likely learned to calculate the mean and standard deviation of a dataset. And your teacher probably told you that there are two kinds of standard deviation: population and sample. The formulas for the two a…

動畫電影的幕后英雄怎么說好_幕后編碼面試-好與壞

動畫電影的幕后英雄怎么說好Interviewing is a skill in and of itself. You can be the best developer in the world but you may still screw up an interview.面試本身就是一種技能。 您可以成為世界上最好的開發人員&#xff0c;但您仍可能會搞砸面試。 How many times h…

數據庫之DML

1、表的有關操作&#xff1a; 1.1、表的創建格式&#xff1a; CREATE TABLE IF NOT EXISTS 表名(屬性1 類型&#xff0c;屬性2 類型&#xff0c;....&#xff0c;屬性n 類型&#xff09;&#xff1b;# 標記部分表示可以省略 1.2、表的修改格式&#xff1a;ALTER table 表名 ADD…

網絡對抗技術作業一 201421410031

姓名&#xff1a;李冠華 學號&#xff1a;201421410031 指導教師&#xff1a;高見 1、虛擬機安裝與調試 安裝windows和linux&#xff08;kali&#xff09;兩個虛擬機&#xff0c;均采用NAT網絡模式&#xff0c;查看主機與兩個虛擬機器的IP地址&#xff0c;并確保其連通性。同時…