物联网通信 - RESTDemo示例程序

概述

Server开放RESTful API接口,供应用程序/移动App/嵌入式qt通过http post调用,实现获取服务端数据,更新服务器数据

详细

 

一、前言

什么是REST

REST即表述性状态传递(英文:Representational State Transfer,简称REST),描述的是在网络中client和server的一种交互形式。

 

REST能干什么

REST可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是REST更是它们最好的选择。

QQ图片20180831190240.png

 

二、主要思路

RestServer实现思路

  1. 搭建REST WCF服务

  2. 实现调用服务

RestClient实现思路

1. 使用C#编程语言访问RestServer提供的各个API接口,并得到返回值

2. 使用JAVA编程语言访问RestServer提供的各个API接口,并得到返回值

 

API接口说明:

测试接口: http://127.0.0.1:8888/JsonService/Test

参数接口: http://127.0.0.1:8888/JsonService/MultiParam

获取数据(未加密)接口: http://127.0.0.1:8888/JsonService/GetDataTable

获取数据(DES加密)接口: http://127.0.0.1:8888/JsonService/GetDataTable_DES

执行操作(未加密)接口: http://127.0.0.1:8888/JsonService/ExecuteNonQuery

执行操作(DES加密)接口: http://127.0.0.1:8888/JsonService/ExecuteNonQuery_DES

三、效果演示

服务端程序(C#)

QQ图片20180831195605.jpg

客户端程序(c#)

客户端程序(java)

QQ图片20180831195148.png

四、代码框架

QQ图片20180831200206.png

 

五、程序实现

RestServer实现

1.配置文件app.config

1
<?xml version="1.0"?><br data-filtered="filtered"><configuration><br data-filtered="filtered">  <system.serviceModel><br data-filtered="filtered">    <services><br data-filtered="filtered">      <service name="ResetServer.JsonService"><br data-filtered="filtered">        <endpoint address="http://127.0.0.1:8888/JsonService" binding="webHttpBinding" contract="ResetServer.IService" /><br data-filtered="filtered">      </service><br data-filtered="filtered">    </services><br data-filtered="filtered">  </system.serviceModel><br data-filtered="filtered"></configuration>

添加接口

1
[ServiceContract]<br data-filtered="filtered">    public interface IService<br data-filtered="filtered">    {<br data-filtered="filtered">        // 测试接口<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "Test",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string Test();<br data-filtered="filtered"><br data-filtered="filtered">        // 多个参数接口<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "MultiParam",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string MultiParam(string strParam1, string strParam2);<br data-filtered="filtered"><br data-filtered="filtered">        // 查询Sql语句(未加密)<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "GetDataTable",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string GetDataTable(string strSql);<br data-filtered="filtered"><br data-filtered="filtered">        // 查询Sql语句(DES加密)<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "GetDataTable_DES",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string GetDataTable_DES(string strSql);<br data-filtered="filtered"><br data-filtered="filtered">        // 执行Sql语句(未加密)<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "ExecuteNonQuery",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string ExecuteNonQuery(string strSql);<br data-filtered="filtered"><br data-filtered="filtered">        // 执行Sql语句(DES加密)<br data-filtered="filtered">        [OperationContract]<br data-filtered="filtered">        [WebInvoke(Method = "POST",<br data-filtered="filtered">                UriTemplate = "ExecuteNonQuery_DES",<br data-filtered="filtered">                ResponseFormat = WebMessageFormat.Json,<br data-filtered="filtered">                BodyStyle = WebMessageBodyStyle.WrappedRequest)]<br data-filtered="filtered">        string ExecuteNonQuery_DES(string strSql);<br data-filtered="filtered">    }

实现接口

1
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]<br data-filtered="filtered">    public class JsonService : IService<br data-filtered="filtered">    {<br data-filtered="filtered">        public string Test()<br data-filtered="filtered">        {<br data-filtered="filtered">            return JsonConvert.SerializeObject(new ResponseModel((int)ResponseEnum.Success, "ok", "", new DataTable()));<br data-filtered="filtered">        }<br data-filtered="filtered"><br data-filtered="filtered">        public string MultiParam(string strParam1, string strParam2)<br data-filtered="filtered">        {<br data-filtered="filtered">            Console.WriteLine("执行函数 [MultiParam]");<br data-filtered="filtered">            return Response("strParam1=" + strParam1 + ",strParam2=" + strParam2, ResponseEnum.Success, "ok", "", new DataTable());<br data-filtered="filtered">        }<br data-filtered="filtered"><br data-filtered="filtered">        public string GetDataTable(string strSql)<br data-filtered="filtered">        {<br data-filtered="filtered">            Console.WriteLine("执行函数 [GetDataTable]");<br data-filtered="filtered">            DataTable dt = QueryDB(strSql);<br data-filtered="filtered">            return Response("strSql=" + strSql, ResponseEnum.Success, "ok", "", dt);<br data-filtered="filtered">        }<br data-filtered="filtered">    }

RestClient实现

1
PostResult HttpPost(string method, string param)<br data-filtered="filtered">        {<br data-filtered="filtered">            PostResult ret = new PostResult();<br data-filtered="filtered"><br data-filtered="filtered">            try<br data-filtered="filtered">            {<br data-filtered="filtered">                // 返回结果<br data-filtered="filtered">                // {"code":0,"info":"ok","msg":"","data":null}<br data-filtered="filtered">                // {"code":0,"info":"ok","msg":"","data":[{"field1":"value10","field2":"value20"},{"field1":"value11","field2":"value21"}]}<br data-filtered="filtered">                WebClient client = new WebClient();<br data-filtered="filtered">                client.Encoding = System.Text.Encoding.UTF8;<br data-filtered="filtered">                client.Headers.Add("Content-Type", "application/json");<br data-filtered="filtered">                string jsonBack = client.UploadString(m_strUrl + method, "POST", param);<br data-filtered="filtered">                jsonBack = jsonBack.Replace(@"\", "");                          // "{\"code\":0,\"info\":\"ok\",\"msg\":\"\",\"data\":null}"<br data-filtered="filtered">                jsonBack = jsonBack.Substring(1, jsonBack.Length - 2);<br data-filtered="filtered">                JObject jsonInfo = (JObject)JsonConvert.DeserializeObject(jsonBack);<br data-filtered="filtered">                if (jsonBack.Contains("code"))<br data-filtered="filtered">                {<br data-filtered="filtered">                    if (0 == jsonInfo.Value<int>("code")) ret.IsSuccess = true;<br data-filtered="filtered">                    ret.Info = jsonInfo.Value<string>("info");<br data-filtered="filtered">                    ret.ErrMsg = jsonInfo.Value<string>("errmsg");<br data-filtered="filtered">                    JArray arrayData = jsonInfo.Value<JArray>("data");<br data-filtered="filtered">                    if (null != arrayData) ret.Data = JsonConvert.DeserializeObject<DataTable>(arrayData.ToString());<br data-filtered="filtered">                }<br data-filtered="filtered">            }<br data-filtered="filtered">            catch (Exception ex)<br data-filtered="filtered">            {<br data-filtered="filtered">                ret.ErrMsg = ex.Message;<br data-filtered="filtered">            }<br data-filtered="filtered"><br data-filtered="filtered">            return ret;<br data-filtered="filtered">        }

六、其他说明

代码发布前已测试过,有什么疑问可以留言

 

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

posted on   demo例子集  阅读(1396)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示