1. 程式人生 > >基於HttpClient介面開發例項(一)

基於HttpClient介面開發例項(一)

前言

本系列將是本人的一些開發經驗總結。由於身處金融IT因而因業務需求需要和銀行介面打交道,恰巧最近公司有個專案和這有很大的關係,下面我們將著重從基於HttpClient介面開發的技術點+基本業務點說起。這算是公司內部比較機密的東西因而不能做過多的說明。本系列以後牽涉到的概念的業務邏輯都將是最基本的,核心的實現的邏輯不陳述。

概述

本系列陳述的將是基於HttpClient介面開發的例項,在實際的需求中和案例中Server間介面的資料傳輸方式有很多種比如Http(HttpClient)/WebService/Socket等等。

  • 使用場景
    • Http:介面間的資料傳輸使用Http比較多一點。即指定Protocol 為Http
    • WebService:Server與Server之間的通訊使用WebService多一點比如WSDL。
    • Socket:多數應用場景為Server 與 Client 之間的通訊,在Server和Client之間指定一對埠,然後接一個Socket再然後指定一下Protocol,然後雙方就可以通訊了。

HttpClient && JSON

首先基於HttpClient之間的介面開發需要在介面之間做一些約定,簡而言之就是一些通訊規則,若是不規範的通訊將不予以處理或者直接通訊失敗。介面間常用的規則和約定有通訊方式、規則和約定、安全方式、交易模式等等。下面我們將以一對基於HttpClient 傳輸JSON報文的例項來陳述。

  • 通訊方式

    • 後臺
      雙方約定介面的通訊方式比如採取的Https Post方式來傳輸JSON資料報文。
    • 頁面
      在一些實際的業務需求中雙方可能會用到彼此的頁面或以H5的頁面展示或者其他的頁面形式展示,因而雙方約定頁面間的通訊方式比如Https。
    • 檔案
      在一些場景下Server間的可能會使用檔案傳輸協議來滿足一些實際的業務需求,因而雙方也許約定系統間的檔案傳輸協議比如Https。
  • 規則及約定

    • 報文規則
      報文采用JSON格式來傳輸介面資料,對於一些必須出現的Mandatory欄位必須上送,一些可選出現的Optional欄位可上送可不上送。

    • 欄位約定
      在上送的JSON point中,需要對欄位型別做約束,比如:char、date、time、decimal…

    • 編碼方式
      需要指定報文的編碼方式比如UTF-8

    • 欄位長度計算說明
      欄位長度的計算說明:所有長度均按位元組計算,中文算三個位元組,英文、數字算一個位元組。

    • 特殊欄位說明

    • 報文結構

      • 請求報文
        一個完整的請求報文應包含頭部和報文主幹部分,我們稱之為Header和Body。

      • 應答報文
        對於一個應答報文而言,必須包含頭部,即Header部分,Body部分可有無。

    • 加簽加密,解密解籤說明
      這是介面間通訊保證資料正確完整傳輸的最最關鍵環節。很多基於HttpClient的介面通訊都必須要做到一點,處理請求報文使用祕鑰加密加簽,處理應答報文使用公鑰解密驗籤。此處便牽涉到一個非對稱加密解密的概念,對於不太瞭解非對稱加密的同學請參考官方文件。在實際的業務需求實現中我也將會詳細說明一個非對稱祕鑰在介面通訊間的使用的例子。這裡不贅述。

  • 安全方式
    在實際的JSON請求或者應答報文中有一些敏感資訊是需要加密傳輸的,此外之前我提到的加簽加密,解密解籤的規則也需要雙方約定好。
    比如現在有一個完整的請求報文,我們需要對它的Body做TreeMap排序(升序或者降序),然後通過加時間戳按一定規則生成一個明文字串A,然後將該明文字串使用我們的自己的祕鑰加簽並生成一個明文加簽之後的字串B或者陣列B,然後再對B使用一定的加密規則(一定是可逆的比如Base64)生成一個密文C,再將這個密文C放到請求報文的Header中(通常而言我們稱之為簽名)。
    對方在收到我們的請求報文之後首先會校驗報文的完整性,然後獲取Header中的簽名C1和時間戳T1,並按照雙方約定的機密演算法解密得到一個字串或者陣列B1,然後再使用我們提供的公鑰驗簽得到一個原生的明文字串A1,然後對整個請求報文的Body做逆運算,本例子:將Body做TreepMap排序,然後結合T1按一定的規則生成一個明文的字串A2,最後將A1和A2作比較,若一致則表示驗籤成功,資料正確完整地傳輸,否則表示驗籤失敗,驗籤失敗有一些原因比如生成的簽名沒有嚴格按照雙方約定執行,或者在資料in-the-fly的過程中被篡改或者丟失。只有在驗籤的成功情況下在處理該次請求,否則不處理。

  • 交易模式
    在HttpClient的請求中有兩個通訊模式一個叫同步請求,另一個叫非同步請求。對於什麼是HttpClient的同步和非同步請求,網上有很多例子的說明,這裡不贅述。下面我們所說的系統間的同步交易和非同步交易將會和如上的同步非同步存在著本質的區別。下面我將討論一下三種基本的交易模式。

  • 後臺同步交易
    這裡寫圖片描述
    說明:首先A平臺使用HttpClient通訊請求將資訊傳送至B平臺,B平臺處理並返回響應報文;若A等待響應報文超時可再次發起同步請求。

  • 後臺非同步交易
    這裡寫圖片描述
    說明:首先A平臺發起同步請求(需要C平臺介入處理的請求),B平臺同步響應該次請求結果,同時B會將該次請求交至第三方處理C平臺處理,第三方把處理結果返回給B,然後B將通過呼叫和A約定好的非同步回撥介面把第一步請求的介面返回給A平臺,A平臺收到請求之後將第五步的處理結果返回給B。
    在整個請求的處理過程中從第二步完成之後到第四步完成可能會需要一定的時間段,因而A/B平臺不能實時開著執行緒I/O去等待響應,於是用過非同步介面回撥的方式把非同步處理結果返回。其中1-2步和5-6使用HttpClient同步請求,3-4用一些基於protocol的方法進行資料互動,因而整個請求處理過程而言可以看做是一個非同步交易。
  • 對賬類交易
    這裡寫圖片描述
    說明:對於對賬類交易的實現是基於HttpClient 同步請求和系統間同步請求完成的。A和B間完成檔案傳輸有兩種情況,第一種是B主動推送檔案通知訊息報文請求,A平臺同步響應,第二種是A平臺主動發起檔案狀態查詢,B平臺同步響應。雙方經過以上”握手”響應之後B向A發情Https 檔案傳輸請求。

小結

  • 對於介面間資料通訊的開發,雙方需要制定一些規則以確保雙方間的通訊過程中資料的完整和可用。這些規則例如:HttpClient JSON/報文加簽/敏感資訊加密/….
  • 對於實際的業務實現,可根據雙方實際情況而定,唯一可以確定的是任何一個業務邏輯的實現都是基於以上規則進行的。
  • 在實際的開發過程中,建議先將整個專案的連貫起來,然後再去做逐個的實現。

相關推薦

基於HttpClient介面開發例項

前言 本系列將是本人的一些開發經驗總結。由於身處金融IT因而因業務需求需要和銀行介面打交道,恰巧最近公司有個專案和這有很大的關係,下面我們將著重從基於HttpClient介面開發的技術點+基本業務點說起。這算是公司內部比較機密的東西因而不能做過多的說明。本系列

Linux USB 驅動開發例項 —— USB攝像頭驅動實現原始碼分析

       Spac5xx的實現是按照標準的USB VIDEO裝置的驅動框架編寫(其具體的驅動框架可參照/usr/src/linux/drivers/usb/usbvideo.c檔案),整個源程式由四個主體部分組成: 裝置模組的初始化模組和解除安裝模組,上層軟體介面模組,

SpringBoot2.0Web開發例項WebJars&靜態資源

本文作者:Spring_ZYL 意見反饋:[email protected] 文章來源:https://blog.csdn.net/gozhuyinglong 版權宣告:本文版權歸作者所有,轉載請註明出處 一、建立Sp

基於Eclipse的開發初識

  最近做基於Eclipse的開發,寫寫對基於Eclipse的開發一些體會。以前一直在用Eclipse,感覺到外掛機制的強大和靈活性,但一直沒有接觸到Eclipse的開發。現在寫程式碼基本上模仿+現學現賣,Eclipse Plugin開發首先就應該學會模仿(我老大常說的一句M

基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇

## 系列文章 1. **[基於 abp vNext 和 .NET Core 開發部落格專案 - 使用 abp cli 搭建專案](https://www.cnblogs.com/meowv/p/12896177.html)** 2. **[基於 abp vNext 和 .NET Core 開發部落格專案

安卓開發筆記——簡單的ui介面設定以及互動設計

一、實驗題目 實驗一: 中山大學智慧健康服務平臺應用開發 實驗程式碼:傳送門:https://github.com/dick20/Android 二、實現內容 1.基本的UI介面設計 實現一個Android應用,介面呈現如圖中的效果。 要求 該介面

基於H5的混合開發介紹WebView

轉自: https://www.cnblogs.com/sanchang/p/9261461.html 一 WebView到底是什麼      1 WebView是一種控制元件,它基於webkit引擎,因此具備渲染Web頁面的功能。     2 基於Webview的混合開發

[資料分享]迅為4412開發介面詳解

開發板平臺簡要介紹 核心板 Exynos4412有兩種封裝形式, 其中POP封裝的晶片內含1GB記憶體, 所以不需要外擴DDR, 可大大節省 PCB 面積,功耗控制方面也更好,多用於手持裝置當中; SCP 封裝優點是記憶體擴 展更靈活,生產工藝相對更容易控制。 電源晶片 S

基於vue-cli網上商城專案實戰開發——搭建一個完整的SPA專案開發框架

基於vue-cli腳手架,結合實際專案經驗,搭建一個完整的SPA專案框架。 安裝vue-cli腳手架 先貼出官方的命令列工具使用方法 官方命令列工具 鑑於此過程比較緩慢,我這裡推薦使用淘寶映象來安裝。依次執行以下步驟 (本人mac,需要sudo獲

Delphi D10.1 移動開發中APP介面基本佈局

Delphi 目前在移動應用開發上已越來越成熟,其高效、簡潔的開發更讓人喜歡。 說明 案例演示使用Delphi控制元件完成介面基本佈局,其中包括TLayout、TVertScrollBox、 TGridPanelLayout、

基於Redux架構的單頁應用開發總結

寫在前面 “大學四年,細細回味。大一,面帶稚嫩的面龐,一腔傻傻的熱情。可愛帥氣的小涵妹,帶我認識時尚,好基友終生難忘。大二,踏上程式設計師之旅,曦點無緣,Smart不棄,恩師點撥學長提攜,滴水之恩湧泉報。大三,有了自己的團隊,樂雁老朱,程式設計遊戲我們都

學習 MeteoInfo二次開發教程

mat 沒有 組件 資源管理 img 教程 layer 添加 bbs 來自氣象家園:http://bbs.06climate.com/forum.php?mod=viewthread&tid=6631 按照教程,沒有太大問題,有些是對c#操作不熟悉導致。 1.添加d

netty開發教程

prot eventloop 操作 公司 大量 read readline 獲得 github Netty介紹 Netty is an asynchronous event-driven network application framework for

ios開發技巧

nss sets pos 哪裏 tro size wid navi tran iOS的一些小技巧 TableView不顯示沒內容的Cell怎麽辦? 類似這樣的,我不想讓以下那些空的顯示. 非常easy. self.tableView.tableFoote

Cardboard虛擬現實開發初步

sce hot tracking 發的 tle motion 減少 app ide Google Cardboard 虛擬現實眼鏡開發初步(一) 虛擬現實技術簡單介紹 不得不說這幾年虛擬現實技術逐漸火熱,伴隨著虛擬現實設備的價格迅速平民化,越來越

微信公眾平臺開發教程 微信公眾賬號註冊流程

身份證 logs 政府 提交 註意 bsp 訪問服務器 定義 htm 具體的操作步驟 1、註冊公眾賬號 註冊地址:http://mp.weixin.qq.com/ 1)首先需要郵箱註冊: 2)郵箱激活。郵箱將會收到激活郵件,點擊激活鏈接即可。 3)需要登記個人信息。這裏需

MySQL 開發技巧

logs 增加 .cn str wid select es2017 使用 idt 一、SQL語句分類 DDL 數據定義語言 TPL 事務處理語言 DCL 數據控制語言 DML 數據操作語言 SELECT INSERT UPDATE DELETE 二、正確使用S

開發問題在windows和linux端口占用問題

logs ets 情況 toc 端口占用 所有 註意 linu eclips 前言   今天在MyEclipse中使用tomcat發現tomcat端口8080竟然被占用了,所以就找了一下解決辦法共參考!   在網絡程序的調試過程中,經常發生一些出乎意料的事情,比如創建一

曼思數學教育開發進展

別人 有意義 提高 成功 目標 是不是 科學家 我們 事情 2017年10月18日,曼斯數學教育在取得了成功過後,現在即將入駐成都地區,曼思數學教育以小學,初中,高中數學為自己核心業務競爭力,旨在解決各個類型學生在面對數學這門學科時候的煩惱,不管是基礎薄弱的學生,對數學恐懼

vue項目開發流程

訪問 running you 命令 http nbsp div spa new vue的環境配置好之後,讓項目運行起來,一般是localhost:8080,如果是移動端,想在手機上查看效果,可以用電腦ip連接訪問 1.打開控制臺查看本機ip,輸入命令:ipconfig