系統API介面規範
僅備忘:
1. 第一章 概述
隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構勢在必行。
u 單一應用架構
Ø 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
u 垂直應用架構
Ø 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
u 分散式服務架構
Ø 當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
本規範旨在為公司各業務系統之間業務複用及整合的API提供介面呼叫與互動規範。同時,也作為未來公司業務系統內各應用模組之間以及各業務系統之間,基於面向服務的架構,以服務介面的方式,提供資料和各種功能的一種嘗試。
本規範僅適用於由伺服器端發起呼叫請求、POST提交資料以及GET請求文字資料結果的API,統一採用UTF-8編碼規則,採用JSON格式響應。
1.
2.
3.
4.
API 服務介面提供如下REST風格的HTTP介面:
http://api.xxx.com/yyy/zzz?{query_string}
query_string由系統級引數部分和具體API呼叫引數部分組成,以key1=value1&key2=value2&…表示,對於採用POST請求的Open API,query_string部分則是在POST請求體裡。所有查詢類的API介面既支援POST,也支援GET方式,提交類的API介面僅支援POST方式。
1.
2.
3.
4.
4.1.
4.2.
以下引數是由API平臺系統定義的,各系統需要支援這些引數以便接入該平臺提供開放介面。API平臺系統採用應用授權認證介面方式,合作初始API平臺系統代第三方系統申請應用分配accessid和金鑰accesskey。
API系統級引數
引數名 |
型別 |
是否必需 |
描述 |
accessid |
string |
是 |
註冊應用時分配到的應用唯一標識,由系統自動生成 |
sign |
string |
是 |
引數簽名,對sign外所有引數串的簽名,包括應用級的引數。 |
timestamp |
long |
是 |
當前時間戳,即從1970年1月1日0時0分0秒開始所經過的秒數。同個應用的不同api請求的time值應該是遞增的, 用於防replay攻擊。 |
各業務系統應遵守API平臺系統規範中應用級通用引數的約定。
應用級引數的通用約定
引數名 |
型別 |
描述 |
pageno |
int |
用於支援分頁的api,預設為1,表示第幾頁 |
pagesize |
int |
用於支援分頁的api,表示每頁返回多少條資料,預設以及上限為25 |
Ø 過程描述
傳送方將引數等進行HMAC演算法計算,將得到的雜湊值(即簽名值)與請求的引數一同提交至接收方,然後接收方再次將引數等值進行HMAC演算法計算,將得到的雜湊值與你傳遞過來的雜湊值進行核對驗證,若一樣,說明請求正確、驗證通過,進行一下步工作,若不一樣,將返回錯誤。
以如下請求為例,說明sign簽名的生成步驟:
http:// api.xxx.com/yyy/zzz?accessid=1234&uid=abc&time=1361431471&sign=XXXXXX
Ø 步驟一:構造源串
1. 將除”sign”以外的所有請求引數按key進行字典升序排列,將除Host標頭(域名
+埠)外的apiname和排序後的引數(key=value)用&拼接起來,如:
/yyy/zzz?accessid=1234&uid=abc&time=1361431471
注意:如果請求中沒有apiname,則在生成簽名時,不需要加入apiname。如上示例,
可改為:accessid=1234&uid=abc&time=1361431471
2. 將上述生成的字串進行URL編碼(參見本章節最後URL編碼注意事項,否則容
易導致後面簽名不能通過驗證)。
步驟二:生成sign值
1. 使用HMAC-SHA1加密演算法,將accessid對應的私鑰accesskey作為引數,對從
步驟一得到的源串進行加密;
2.將上述加密後的字串進行Base64編碼。
注意:生成的簽名中可能包含“=”,因此需要再進行一次URL編碼。
執行完上述步驟,即可獲得簽名串,作為sign的值。
URL編碼注意事項
URL編碼規則:
簽名驗證時,要求對字串中除了“-”、“_”、“.”之外的所有非字母數字字元都替換成百分號(%)後跟兩位十六進位制數。
十六進位制數中字母必須為大寫。
注意事項:
1. 某些系統方法,例如.NET系統方法HttpUtility.UrlEncode會將‘=’編碼成‘%3d’,而不是%3D,導致加密簽名通不過驗證。Java早期版本中,呼叫java.net.URLEncoder下的方法進行URL編碼時,某些特殊字元如“*”不會被編碼,而不是“%2A”,會導致生成的簽名不能通過驗證。因此,需開發人員手動編碼,否則將導致加密簽名一直通不過驗證。
2. 某些語言的urlencode方法會把“空格”編碼為“+”,實際上應該編碼為“%20”。這也將生成錯誤的簽名,導致簽名通不過驗證。請開發人員手動將“+”替換為“%20”。
在PHP中,推薦用rawurlencode方法進行URL編碼。
{
string accessid = "1234";
string accesskey ="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
string time =System.DateTime.Now.ToString("yyyyMMddHHmmss");
string value = "";
string queryString = "";
//準備引數
SortedDictionary<string, string>paramlist = new SortedDictionary<string, string>();
paramlist.Add("city","1");
paramlist.Add("countyName","海淀區");
paramlist.Add("buildName", "新浪大廈");
paramlist.Add("status","2");
paramlist.Add("timestamp",timestamp);
//拼接字串
foreach (KeyValuePair<string, string>kvp in paramlist)
{
value += kvp.Key + kvp.Value;
queryString += "&" +kvp.Key + "=" + Utf8Encode(kvp.Value);
}
StringBuilder sb = new StringBuilder();
sb.Append(apiKey);
sb.Append(value);
sb.Append(apiSecret);
value = sb.ToString();
string url ="http://api.xxx.com/build/getbuildinfo?apikey=" + apiKey +"×tamp=" + timestamp + "&apisign=" +SHA1(value) + queryString;
int status = 0;
Console.WriteLine(url);
Console.WriteLine(RequestUrl(url, outstatus));
Console.ReadLine();
}
執行結果顯示如下(僅演示,中間略過RequestUrl(url, out status)具體執行):[a1]
注意:請確保介面與呼叫者的字串編碼一致,最好統一使用utf-8編碼,如果編碼方式不一致則計算出來的簽名會校驗失敗。
1.
2.
3.
4.
5.
API當前僅支援JSON響應格式,正常響應包符合如下規範的json字串:
l http響應頭中的Content-Type指定為application/json, charset=utf-8
l 字串編碼格式是UTF-8
l 輸出格式為:
{
"StatusCode": "錯誤碼(數值型)",
"StatusMsg": "錯誤描述(字元型)"
,
[Response Body]
}
(*) [Response Body] 可為空。
錯誤響應輸出內容符合以下規範:
l 返回內容包含在json輸出格式”Status”中,由StatusCode、StatusMsg這2個屬性組成,分別用於描述錯誤碼以及錯誤資訊。
以下為json輸出格式示例:
{
"StatusCode": 0,
"StatusMsg": "Success"
,
"Body": {
"ID": 2,
"Name": "新浪大廈",
"Description": {
"CityName": "北京",
"CountyName": "海淀",
"Business": "中關村",
"Address": "中關村大街甲59號文化大廈1007"
},
"Fit": "豪裝",
"AvgDailyRent": 500,
"MainImage": "http://192.168.1.1:7000/LP/2015/09/14/Tb/20150914163059_6404.jpg"
}
}
API平臺系統API呼叫過程中可能會返回的錯誤碼定義如下表所示:
statuscode |
statusmsg |
Description |
0 |
Success |
成功 |
1 |
Unknown error |
未知錯誤 |
注:錯誤碼隨API細化,會逐漸增多,當前為規則說明。
以下為API介面細則參考:
服務名稱 |
|||||
HTTP訪問方式 |
|||||
GET |
|||||
功能描述 |
|||||
獲取單個課程資訊 |
|||||
適用物件 |
|||||
所有使用者,但需要提供簽名校驗 |
|||||
注意事項 |
|||||
呼叫引數 |
|||||
系統引數 |
|||||
名稱 |
型別 |
是否必須 |
描述 |
||
accessid |
string |
Y |
平臺為應用分配的應用代號 |
||
sign |
string |
Y |
按照簽名規則(見上文)生成的簽名字串 |
||
timestamp |
long |
Y |
|||
應用級引數 |
|||||
名稱 |
型別 |
是否必須 |
描述 |
||
cid |
int |
Y |
課程編號 |
||
呼叫舉例 |
|||||
http://www.abc.cn/api/values? accessid=15& timestamp=13%3a34%3a49&cid=100&sign=841b6d05c041e3876a778e93a79d5e48 |
|||||
返回值 |
|||||
{ "StatusCode": 0, "StatusMsg": "Success", "Body": { "ID": 100, "Name": "測試課程", "Description": { "SchoolName": "北京電大", "Teacher": "楊老師" }, "MainImage": "http://192.168.1.1:7000/LP/2015/09/14/Tb/20150914163059_6404.jpg" } } |
[a1]簽名演算法調整,待修改示例程式碼
相關推薦
系統API介面規範
僅備忘: 1. 第一章 概述 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構勢在必行。 u 單一應用架構 Ø 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。 u 垂直應用架構 Ø 當訪問量逐漸增大
rest api介面規範
1.設計規範 1.協議:使用HTTPs協議 確保互動資料的傳輸安全 2.域名:儘量將api部署在專用域名下https://api.example.com 3.版本控制:將版本號放在url中或者header中 v1,v2,vn 4.路徑:只能包含名詞, 5.過濾資訊:?limit=
CHENGDU3-Restful API 介面規範、django-rest-framework框架
Restful API 介面規範、django-rest-framework框架 問題:什麼是API? 答:API是介面,提供url. 介面有兩個用途: 為別人提供服務,前後端分離。 為什麼使用前後端分離? 答:主要為了資料的解耦,提高開發效率。 如果更新了資料,
API介面規範(試行版)
1.協議 API與使用者的通訊協議,總是使用HTTPS協議,確保互動資料的傳輸安全。 2.安全 為了保證介面接收到的資料不是被篡改以及防止資訊洩露造成損失,對敏感資料進行加密及簽名。 資料加密 api介面請求引數一律採用RSA進行加解密,在客戶端使用公鑰對請求引數進行加密,在服務端使用對數私鑰據進行解密
RESTful api介面規範
整體規範建議採用RESTful 方式來實施。 協議 API與使用者的通訊協議,總是使用HTTPs協議,確保互動資料的傳輸安全。 域名 應該儘量將API部署在專用域名之下。 https://api.example.com 如果確定API很簡單,不會有進一步擴充套件,可以考
API介面規範
協議API與使用者的通訊協議,使用HTTP協議。版本應該將API的版本號放入URL: https://neusoft.com/api/v1/ 路徑每一個網址代表一種資源(resource),所以網址中不能有動詞,只能有名詞。API中的名詞對應集合的情況,需要使用複數。H
後臺API介面規範
介面規範 最新公司新的專案,使用spring boot,cloud,服務之間使用rest api進行呼叫,所有使用了restful 風格的介面 @RequestMapping(value = "/getByRegionId/{regionId}", me
PHP:API 介面規範完整版本
整體規範建議採用RESTful 方式來實施。 協議 API與使用者的通訊協議,總是使用HTTPs協議,確保互動資料的傳輸安全。 域名 api版本控制 應該將API的版本號放入URL。https://api.example.com/v{n}/ 另一種做法是,將
API介面規範完整版本
整體規範建議採用RESTful 方式來實施。協議API與使用者的通訊協議,總是使用HTTPs協議,確保互動資料的傳輸安全。域名應該儘量將API部署在專用域名之下。https://api.example.com如果確定API很簡單,不會有進一步擴充套件,可以考慮放在主域名下。https://example.or
使用API介面在zabbix系統中登陸、建立、刪除agent
一、API的介紹 API(Application Programming Interface,應用程式程式設計介面)是一些預先定義的函式,目的是提供應用程式與開發人員基於某軟體或硬體得以訪問一組例程的能力,而又無需訪問原始碼,或理解內部工作機制的細節。 在linux中,使用者程式設計介面API遵循了UNIX
Restful規範-開發api介面
web服務互動 我們在瀏覽器中能看到的每個網站,都是一個web服務。那麼我們在提供每個web服務的時候, 都需要前後端互動,前後端互動就一定有一些實現方案,我們通常叫web服務互動方案。 目前主流的三種web服務互動方案: -- REST ( Representational Stat
網路監視系統zabbix3.4的配置及利用API介面在監控系統中的應用
一、zabbix的基礎知識 1、什麼是zabbix zabbix是一個基於WEB介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案,zabbix能監視各種網路引數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問
使用 RSSBus Connect™ 系統預設 API 介面
RSSBus Connect™在為您提供強大的EDI功能的同時, 也考慮到了如何方便的與之整合. 在此篇文章中, 我們會通過一個例子為您說明關於RSSBus Connect™的API功能的使用. 瀏覽API定義 API的安全認證 建立使用者 訪
Java本機介面規範內容 第5章:呼叫API
Invocation API允許軟體供應商將Java VM載入到任意本機應用程式中。 供應商可以提供支援Java的應用程式,而無需連結Java VM原始碼。 本章首先概述了Invocation API。 接下來是所有Invocation API函式的參考頁面。 它涵蓋以下主
【流程規範】API介面文件規範
介面名稱 前置主動還款申請(/payBill) 介面描述 返回格式:json 請求方式:GET/ POST 介面備註:根據傳入的key和qq號碼發起還款的申請 請
【RESTful】RESTful API 介面設計規範 | 示例
概念 本質:一種軟體架構風格 核心:面向資源設計的API 解決問題: 降低開發的複雜性 提高系統的可伸縮性 例如:設計一套API,為多個終端服務。 設計概念和準則 網路上的所有事物都可以被抽象為資源 每一個資源都有唯一的資源標識,
RESTful API介面設計標準及規範;
RESTful發展背景及簡介 網路應用程式,分為前端和後端兩個部分。當前的發展趨勢,就是前端裝置層出不窮(手機、平板、桌面電腦、其他專用裝置…)。因此,必須有一種統一的機制,方便不同的前端裝置與後端進行通訊。這導致API構架的流行,甚至出現"APIFirst"的設計思想。RESTful
利用API介面在zabbix監控系統中檢視,建立及刪除監控主機
什麼是API: API(Application Programming Interface,應用程式程式設計介面)是一些預先定義的函式,目的是提供應用程式與開發人員基於某軟體或硬體得以訪問一組例程的能力,而又無需訪問原始碼,或理解內部工作機制的細節。簡單的說,
基於中國移動OMC系統北向介面規範實現及原始碼
一、 中國移動OMC系統北向介面規範要求 OMC北向介面是OMC系統與網路管理系統(NMS)間的介面,分為上行介面和下行介面。上行介面指從OMC到NMS的介面,下行介面指從NMS到OMC的介面。 介面總體架構如下: 介面說明: 1、資源資料介面:資料量相對較小,週期性單
經驗分享-API介面響應格式規範定義
俗話說無規矩不成方圓,一個介面一種資料響應格式,一個開發人員一種開發格式,導致程式碼不規範,資料解析複雜化,維護更是難上加難。 1.關於介面響應資料格式參考[json格式],做到不使用的屬性不返回 基