概述
詳細
一、前言
什么是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
<?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;
}
六、其他說明
代碼發布前已測試過,有什么疑問可以留言