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

接口制定

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

复制代码
    [BeetleX.FastHttpApi.Controller]     public class Controller      {         public object GetEmployeesName()         {             return from e in mEmployees select new { ID = e.EmployeeID, Name = e.FirstName + " " + e.LastName };         }         public object GetCustomersName()         {             return from c in mCustomers select new { ID = c.CustomerID, Name = c.CompanyName };         }         public object ListOrders(int employeeid, string customerid, IHttpContext context)         {             return mOrders.Where(o =>             (employeeid == 0 || o.EmployeeID == employeeid)             &&             (string.IsNullOrEmpty(customerid) || o.CustomerID == customerid));         }     }
复制代码

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

  1. /GetEmployeesName 获取雇员的ID和名称列表
  2. /GetCustomersName 获取客户的ID和名称列表
  3. /ListOrders 查询相应雇员和客户的订单信息 在浏览器上直接访问/GetEmployeesName的数据结果

 

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

页面Ajax请求接口

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

复制代码
        $.get("/GetEmployeesName", function (result) {             a = result.Data;             a.forEach(function (v, i) {                 $('#lstEmployees').append(' <option value="' + v.ID + '">' + v.Name + '</option>')             });         });         $.get("/GetCustomersName", function (result) {              a = result.Data;             a.forEach(function (v, i) {                 $('#lstCustomers').append(' <option value="' + v.ID + '">' + v.Name + '</option>')             });         });
复制代码

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

订单查询

复制代码
  function HttpSearch() {         $.get('/listorders?employeeid=' + $('#lstEmployees').val() + "&customerid=" + $('#lstCustomers').val(), function (result) {             bindOrders(result.Data);         });     }   function bindOrders(items) {         $("#lstbody").empty();         items.forEach(function (v, i) {             $("#lstbody"