物联⽹通信-RESTDemo⽰例程序
概述
Server开放RESTful API接⼝,供应⽤程序/移动App/嵌⼊式qt通过http post调⽤,实现获取服务端数据,更新服务器数据
详细
代码下载:
⼀、前⾔
什么是REST
REST即表述性状态传递(英⽂:Representational State Transfer,简称REST),描述的是在⽹络中client和server的⼀种交互形式。
REST能⼲什么
REST可以通过⼀套统⼀的接⼝为 Web,iOS和Android提供服务。另外对于⼴⼤平台来说,⽐如Faceboo
k platform,微博开放平台,公共平台等,它们不需要有显式的前端,只需要⼀套提供服务的接⼝,于是REST更是它们最好的选择。
⼆、主要思路
RestServer实现思路
1. 搭建REST WCF服务
2. 实现调⽤服务
RestClient实现思路
1. 使⽤C#编程语⾔访问RestServer提供的各个API接⼝,并得到返回值
2. 使⽤JAVA编程语⾔访问RestServer提供的各个API接⼝,并得到返回值
API接⼝说明:
三、效果演⽰
服务端程序(C#)
客户端程序(c#)
客户端程序(java)
四、代码框架
五、程序实现
RestServer实现
1.配置⽂件fig
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="ResetServer.JsonService">
<endpoint address="127.0.0.1:8888/JsonService" binding="webHttpBinding" contract="ResetServer.IService" />      </service>
</services>
</system.serviceModel>
</configuration>
添加接⼝
[ServiceContract]
public interface IService
{
// 测试接⼝
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "Test",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string Test();
// 多个参数接⼝
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "MultiParam",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string MultiParam(string strParam1, string strParam2);
// 查询Sql语句(未加密)
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "GetDataTable",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string GetDataTable(string strSql);
/
/ 查询Sql语句(DES加密)
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "GetDataTable_DES",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string GetDataTable_DES(string strSql);
// 执⾏Sql语句(未加密)
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "ExecuteNonQuery",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string ExecuteNonQuery(string strSql);
// 执⾏Sql语句(DES加密)
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "ExecuteNonQuery_DES",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string ExecuteNonQuery_DES(string strSql);
}
实现接⼝
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
restful接口调用实例public class JsonService : IService
{
public string Test()
{
return JsonConvert.SerializeObject(new ResponseModel((int)ResponseEnum.Success, "ok", "", new DataTable()));        }
public string MultiParam(string strParam1, string strParam2)
{
Console.WriteLine("执⾏函数 [MultiParam]");
return Response("strParam1=" + strParam1 + ",strParam2=" + strParam2, ResponseEnum.Success, "ok", "", new DataTable());        }
public string GetDataTable(string strSql)
{
Console.WriteLine("执⾏函数 [GetDataTable]");
DataTable dt = QueryDB(strSql);
return Response("strSql=" + strSql, ResponseEnum.Success, "ok", "", dt);
}
}
RestClient实现
PostResult HttpPost(string method, string param)
{
PostResult ret = new PostResult();
try
{
// 返回结果
// {"code":0,"info":"ok","msg":"","data":null}
// {"code":0,"info":"ok","msg":"","data":[{"field1":"value10","field2":"value20"},{"field1":"value11","field2":"value21"}]}
WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.UTF8;
client.Headers.Add("Content-Type", "application/json");
string jsonBack = client.UploadString(m_strUrl + method, "POST", param);
jsonBack = jsonBack.Replace(@"\", "");                          // "{\"code\":0,\"info\":\"ok\",\"msg\":\"\",\"data\":null}"
jsonBack = jsonBack.Substring(1, jsonBack.Length - 2);
JObject jsonInfo = (JObject)JsonConvert.DeserializeObject(jsonBack);
if (jsonBack.Contains("code"))
{
if (0 == jsonInfo.Value<int>("code")) ret.IsSuccess = true;
ret.Info = jsonInfo.Value<string>("info");
ret.ErrMsg = jsonInfo.Value<string>("errmsg");
JArray arrayData = jsonInfo.Value<JArray>("data");
if (null != arrayData) ret.Data = JsonConvert.DeserializeObject<DataTable>(arrayData.ToString());
}
}
catch (Exception ex)
{
ret.ErrMsg = ex.Message;
}
return ret;
}
六、其他说明
代码发布前已测试过,有什么疑问可以留⾔
代码下载:
注:本⽂著作权归作者,由demo⼤师发表,拒绝转载,转载需要作者授权

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。