物联网通信 - RESTDemo示例程序
概述
详细
一、前言
什么是REST
REST即表述性状态传递(英文:Representational State Transfer,简称REST),描述的是在网络中client和server的一种交互形式。
REST能干什么
REST可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是REST更是它们最好的选择。
二、主要思路
RestServer实现思路
-
搭建REST WCF服务
-
实现调用服务
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#)
客户端程序(c#)
客户端程序(java)
四、代码框架
五、程序实现
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"> } |
六、其他说明
代码发布前已测试过,有什么疑问可以留言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?