在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致,具体可以在解释Body上有所不同。FastHttpApi在实现过程完全支持http协议升级成websocket协议,当制定一个基于http请求的接口时,其实已经是完全支持websocket协议;从而让使用者只编写一份代码即可同时接受两种协议处理。接下来还是以Northwind的数据来描述FastHttpApi制定相应服务开发。

接口制定

对于FastHttpApi定义一个可访问的Http接口是一件非常简单的事情,和定义一个逻辑方法没有多大的差异;以下是定义一个订单查询逻辑的http接口,返回Json格式的数据。

以上代码定义了三个Http请求:

  1. /GetEmployeesName 获取雇员的ID和名称列表

  2. /GetCustomersName 获取客户的ID和名称列表

  3. /ListOrders 查询相应雇员和客户的订单信息 在浏览器上直接访问/GetEmployeesName的数据结果

FastHttpApi对接口响应有默认的Json格式返回,Code为HTTP返回的状态码,200为正常,如果不是200那会带上Error信息,Data则是具体响应的数据内容,Url则是对应请求的基础地址。

页面Ajax请求接口

既然通过浏览器访问没有问题,那接下来就可以通过Ajax进行数据请求了;以下是通过ajax调用/GetEmployeesName/GetCustomersName两个方法。

请求数据后绑定到select控件上,这种是相当原始的设置模式了,相信现有的web前端组件已经不需要这么麻烦的工作了:)

订单查询

对于FastHttpApi制定方法参数的在http主要有两种来源途径,一种是通过Querystring提供,而另一种则通过Post一个json内容来提供;对于组件来说只要没有添加[BodyParameter]标签的参数都由QueryString来提供(实际使用中有特别的需要则可以实现自己Parameter的属性标签来扩展)。这样一个订单查询的功能就开发完成了

WebSocket请求

由于服务端口和网站的端口是一致,所以构建websocket连接的时候并不要显式地指定地址,直接拿浏览当前的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) };

连接创建后就可以对服务进行请求,由于websocket默认发送的Text内容,为了能够方便调用需要制定一些数据格式规划,在这里我们首选也是Json.

请求的数据内容主要包括urlparams,url是描述具体请求的Http地址;params则是描述对应参数名的参数。通过和ajax的查询代码来对比,两者没有多大的区别,前者是基于url请求而后者则通过描述一个json来处理。

API调用方式查看

FastHttpApi内部集成了一个API查询面页,通过这个页面可以查询当前服务下所有可访问的接口,并描述接口在ajax和websocket下的访问调用方式和相关数据格式。访问路径/_info/api.html

总结

如果你想开发一个接口服务相同时支持ajax和websocket访问的话,那FastHttpApi会是不错的选择,因为它能提供方便,高效和安全的应用服务接口编写基础服务功能。 本文例子的项目代码:/samples/HttpApiServer.HttpAndWebsocketApi

相关文章:

  • dotnet core高吞吐Http api服务组件FastHttpApi

原文地址: https://www.cnblogs.com/smark/p/9712639.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

dotnet core 开发无缝兼容Http和Websocket协议的接口服务相关推荐

  1. dotnet core 开发体验之Routing

    开始 回顾上一篇文章:dotnet core开发体验之开始MVC 里面体验了一把mvc,然后我们知道了aspnet mvc是靠Routing来驱动起来的,所以感觉需要研究一下Routing是什么鬼. ...

  2. vs2017 js cordova + dotnet core 开发app

    原文:vs2017 js cordova + dotnet core 开发app 1.记得在index.html加入 <meta http-equiv="Content-Securit ...

  3. dotnet core开发体验之开始MVC

    开始 在上一篇文章:dotnet core多平台开发体验 ,体验了一把dotnet core 之后,现在想对之前做的例子进行改造,想看看加上mvc框架是一种什么样的体验,于是我就要开始诞生今天的这篇文 ...

  4. RuoYi-plus一款由SpringBoot2.x,springcloudG开发的SMP多商户权限管理系统+API接口服务组成,可选性后台管理系统或后端接口服务

    数据库脚本请加QQ群,在群文件下载. [技术支持群]687672649[技术交流群]751872263 通知!!! RuoYi-plusv3.0版本介绍: 成功集成多商户管理模式,完美的与基础框架相融 ...

  5. Jmeter实现WebSocket协议的接口和性能测试方法

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一 ...

  6. 直播系统定制开发中安卓直播间websocket协议破解还原

    前言 现如今在直播系统定制开发中直播间协议很多已经很少使用http轮询的方式获取直播间的弹幕.礼物.关注等,在用的目前知道的是某音的直播,其他的一些app已经使用socket或者websoceket获 ...

  7. MongoDB via Dotnet Core数据映射详解

    用好数据映射,MongoDB via Dotnet Core开发变会成一件超级快乐的事.   一.前言 MongoDB这几年已经成为NoSQL的头部数据库. 由于MongoDB free schema ...

  8. 一文说通Dotnet Core的后台任务

    这是一文说通系列的第二篇,里面有些内容会用到第一篇中间件的部分概念.如果需要,可以参看第一篇:一文说通Dotnet Core的中间件   一.前言 后台任务在一些特殊的应用场合,有相当的需求. 比方, ...

  9. dotnet core 微服务教程

    这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...

最新文章

  1. 报告 | 电竞中高端人才平均年薪21.6万元,仅次于金融业
  2. pdo oracle返回参数游标,PDOStatement::closeCursor
  3. 【codevs30521022】多米诺覆盖,二分图
  4. 《How to Reshape Input Data for Long Short-Term Memory Networks in Keras》学习笔记
  5. 标记分布学习LDL与多标记学习MLL以及单标记学习
  6. Qt5.12安卓开发环境搭建
  7. 域的基本管理:统一公司部门桌面
  8. 数学建模论文详细分工——论文手要求篇
  9. 原生小程序 引入vant-weapp 组件库 和 WeUI组件库
  10. PA塑料EN45545-2:2020R22 HL3防火检测的难易程度
  11. 如何在CSDN上删除博客、删除自己上传的资源
  12. Photoshop入门与进阶实例:3.3 乳胶漆纹理效果
  13. python在国内外研究现状_机器人教育_国内外Python课程现状?
  14. 文件查找(c语言 findfirst函数,findnext函数)
  15. 操作系统:内存管理(概念)
  16. 华为eNSP配置dhcp 下发ipv4地址
  17. 梅花linux操作系统,Linux操作系统 精伦H3多媒体中心促销
  18. w10打游戏老是弹出计算机,Win10玩游戏频繁弹回桌面的怎么办?
  19. python输出姓名、部门和工资、并输出最高工资_用Python从并行数组打印员工和工资...
  20. Spring Boot映射静态资源

热门文章

  1. 洛谷P4364 [九省联考2018]IIIDX(线段树)
  2. Unity 游戏框架搭建 (九) 减少加班利器-QConsole
  3. LeetCode 3_Longest Substring Without Repeating Characters
  4. [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)
  5. 如何使用GeneralUpdte构建客户端自动升级功能
  6. C# 值得永久收藏的WPF项目实战(经典)
  7. 云原生开发框架dapr环境搭建:CLI安装和初始化
  8. Vue 2升级 Vue 3初探小细节
  9. 云原生 | .NET 5 with Dapr 初体验
  10. OxyPlot.SkiaSharp中文显示乱码的问题