dotnet core 开发无缝兼容Http和Websocket协议的接口服务
在應(yīng)用接口開(kāi)發(fā)中往往要針對(duì)不同協(xié)義開(kāi)發(fā)相應(yīng)的代理服務(wù),但對(duì)于Websocket和http這兩種協(xié)議來(lái)說(shuō)就有些不同,從實(shí)現(xiàn)上來(lái)看Websocket可以說(shuō)是Http的升級(jí)子協(xié)議, 兩者在協(xié)議處理上基本一致,具體可以在解釋Body上有所不同。FastHttpApi在實(shí)現(xiàn)過(guò)程完全支持http協(xié)議升級(jí)成websocket協(xié)議,當(dāng)制定一個(gè)基于http請(qǐng)求的接口時(shí),其實(shí)已經(jīng)是完全支持websocket協(xié)議;從而讓使用者只編寫一份代碼即可同時(shí)接受兩種協(xié)議處理。接下來(lái)還是以Northwind的數(shù)據(jù)來(lái)描述FastHttpApi制定相應(yīng)服務(wù)開(kāi)發(fā)。
接口制定
對(duì)于FastHttpApi定義一個(gè)可訪問(wèn)的Http接口是一件非常簡(jiǎn)單的事情,和定義一個(gè)邏輯方法沒(méi)有多大的差異;以下是定義一個(gè)訂單查詢邏輯的http接口,返回Json格式的數(shù)據(jù)。
以上代碼定義了三個(gè)Http請(qǐng)求:
/GetEmployeesName?獲取雇員的ID和名稱列表
/GetCustomersName?獲取客戶的ID和名稱列表
/ListOrders?查詢相應(yīng)雇員和客戶的訂單信息 在瀏覽器上直接訪問(wèn)/GetEmployeesName的數(shù)據(jù)結(jié)果
?
FastHttpApi對(duì)接口響應(yīng)有默認(rèn)的Json格式返回,Code為HTTP返回的狀態(tài)碼,200為正常,如果不是200那會(huì)帶上Error信息,Data則是具體響應(yīng)的數(shù)據(jù)內(nèi)容,Url則是對(duì)應(yīng)請(qǐng)求的基礎(chǔ)地址。
頁(yè)面Ajax請(qǐng)求接口
既然通過(guò)瀏覽器訪問(wèn)沒(méi)有問(wèn)題,那接下來(lái)就可以通過(guò)Ajax進(jìn)行數(shù)據(jù)請(qǐng)求了;以下是通過(guò)ajax調(diào)用/GetEmployeesName和/GetCustomersName兩個(gè)方法。
請(qǐng)求數(shù)據(jù)后綁定到select控件上,這種是相當(dāng)原始的設(shè)置模式了,相信現(xiàn)有的web前端組件已經(jīng)不需要這么麻煩的工作了:)
訂單查詢
對(duì)于FastHttpApi制定方法參數(shù)的在http主要有兩種來(lái)源途徑,一種是通過(guò)Querystring提供,而另一種則通過(guò)Post一個(gè)json內(nèi)容來(lái)提供;對(duì)于組件來(lái)說(shuō)只要沒(méi)有添加[BodyParameter]標(biāo)簽的參數(shù)都由QueryString來(lái)提供(實(shí)際使用中有特別的需要?jiǎng)t可以實(shí)現(xiàn)自己Parameter的屬性標(biāo)簽來(lái)擴(kuò)展)。這樣一個(gè)訂單查詢的功能就開(kāi)發(fā)完成了
?
WebSocket請(qǐng)求
由于服務(wù)端口和網(wǎng)站的端口是一致,所以構(gòu)建websocket連接的時(shí)候并不要顯式地指定地址,直接拿瀏覽當(dāng)前的Host地址即可。
websocket = new WebSocket("ws://" + window.location.host);websocket.onopen = function (evt) { onOpen(evt) };websocket.onclose = function (evt) { onClose(evt) };websocket.onmessage = function (evt) { onMessage(evt) };websocket.onerror = function (evt) { onError(evt) };連接創(chuàng)建后就可以對(duì)服務(wù)進(jìn)行請(qǐng)求,由于websocket默認(rèn)發(fā)送的Text內(nèi)容,為了能夠方便調(diào)用需要制定一些數(shù)據(jù)格式規(guī)劃,在這里我們首選也是Json.
請(qǐng)求的數(shù)據(jù)內(nèi)容主要包括url和params,url是描述具體請(qǐng)求的Http地址;params則是描述對(duì)應(yīng)參數(shù)名的參數(shù)。通過(guò)和ajax的查詢代碼來(lái)對(duì)比,兩者沒(méi)有多大的區(qū)別,前者是基于url請(qǐng)求而后者則通過(guò)描述一個(gè)json來(lái)處理。
API調(diào)用方式查看
FastHttpApi內(nèi)部集成了一個(gè)API查詢面頁(yè),通過(guò)這個(gè)頁(yè)面可以查詢當(dāng)前服務(wù)下所有可訪問(wèn)的接口,并描述接口在ajax和websocket下的訪問(wèn)調(diào)用方式和相關(guān)數(shù)據(jù)格式。訪問(wèn)路徑/_info/api.html
總結(jié)
如果你想開(kāi)發(fā)一個(gè)接口服務(wù)相同時(shí)支持ajax和websocket訪問(wèn)的話,那FastHttpApi會(huì)是不錯(cuò)的選擇,因?yàn)樗芴峁┓奖?#xff0c;高效和安全的應(yīng)用服務(wù)接口編寫基礎(chǔ)服務(wù)功能。 本文例子的項(xiàng)目代碼:/samples/HttpApiServer.HttpAndWebsocketApi
相關(guān)文章:
dotnet core高吞吐Http api服務(wù)組件FastHttpApi
原文地址:?https://www.cnblogs.com/smark/p/9712639.html
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的dotnet core 开发无缝兼容Http和Websocket协议的接口服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [译]ABP vNext介绍
- 下一篇: centos7 lldb 调试netco