1. 程式人生 > >物聯網通信 - RESTDemo示例程序

物聯網通信 - RESTDemo示例程序

spa val 1.0 api mode headers exc json alt

概述

Server開放RESTful API接口,供應用程序/移動App/嵌入式qt通過http post調用,實現獲取服務端數據,更新服務器數據

詳細

代碼下載:http://www.demodashi.com/demo/13944.html

一、前言

什麽是REST

REST即表述性狀態傳遞(英文:Representational State Transfer,簡稱REST),描述的是在網絡中client和server的一種交互形式。

REST能幹什麽

REST可以通過一套統一的接口為 Web,iOS和Android提供服務。另外對於廣大平臺來說,比如Facebook platform,微博開放平臺,微信公共平臺等,它們不需要有顯式的前端,只需要一套提供服務的接口,於是REST更是它們最好的選擇。

技術分享圖片

二、主要思路

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#)

技術分享圖片

客戶端程序(c#)

技術分享圖片

客戶端程序(java)

技術分享圖片

四、代碼框架

技術分享圖片

技術分享圖片

技術分享圖片

五、程序實現

RestServer實現

1.配置文件app.config

<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="ResetServer.JsonService">
<endpoint address="http://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)]
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;
}

六、其他說明

代碼發布前已測試過,有什麽疑問可以留言

代碼下載:http://www.demodashi.com/demo/13944.html

註:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權

物聯網通信 - RESTDemo示例程序