概述

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

详细

一、前言

什么是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

  1. <?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>

添加接口

  1. [ServiceContract]
    public interface IService
    {
    // 测试接口
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "Test",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string Test();
  2.  
  3. // 多个参数接口
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "MultiParam",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string MultiParam(string strParam1, string strParam2);
  4.  
  5. // 查询Sql语句(未加密)
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "GetDataTable",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string GetDataTable(string strSql);
  6.  
  7. // 查询Sql语句(DES加密)
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "GetDataTable_DES",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string GetDataTable_DES(string strSql);
  8.  
  9. // 执行Sql语句(未加密)
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "ExecuteNonQuery",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string ExecuteNonQuery(string strSql);
  10.  
  11. // 执行Sql语句(DES加密)
    [OperationContract]
    [WebInvoke(Method = "POST",
    UriTemplate = "ExecuteNonQuery_DES",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string ExecuteNonQuery_DES(string strSql);
    }

实现接口

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

RestClient实现

  1. PostResult HttpPost(string method, string param)
    {
    PostResult ret = new PostResult();
  2.  
  3. 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;
    }
  4.  
  5. return ret;
    }

六、其他说明

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

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

物联网通信 - RESTDemo示例程序的更多相关文章

  1. 物联网通信 - RESTDemo示例程序(C#版本)

    技术:wcf+http post+json(.net4.0 + jdk1.8) 运行环境:vs2010+java 概述Server开放RESTful API接口,供应用程序/移动App/嵌入式qt通过 ...

  2. 物联网通信 - RESTDemo示例程序(Python版本)

    QQ:505645074 下载地址: https://pan.baidu.com/s/1VHtni6rVslXkSBTW26jXTg GET接口 http://127.0.0.1:5000/test/ ...

  3. 物联网通信 - RESTDemo示例程序(Java版本)

    源码下载  -> 提取码  QQ:505645074 Netty的Restful API实现 Get: http://127.0.0.1:8662/test Post http://127.0. ...

  4. Windows Communication Foundation (WCF)和Windows CardSpace的示例程序

    微软公司昨天发布了一个Windows Communication Foundation (WCF)和Windows CardSpace的示例程序包,内容极为丰富,从最简单的Hello World到复杂 ...

  5. Socket编程指南及示例程序(转)

    1         前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...

  6. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  7. .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序

    在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...

  8. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  9. Salesforce Apex 使用JSON数据的示例程序

    本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...

随机推荐

  1. 使用SQL语句将数据库中的两个表合并成一张表

    select * into 新表名 from (select * from T1 union all select * from T2)  这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数 ...

  2. [转][Android] ListView中getView的原理+如何在ListView中放置多个item

      ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果 ...

  3. zoj 3621 Factorial Problem in Base K 数论 s!后的0个数

    Factorial Problem in Base K Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onli ...

  4. bzoj 4001 [TJOI2015]概率论 数学

    4010: [HNOI2015]菜肴制作 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  5. 【原】【Git】EGit强制覆盖本地文件

    今天带来的是EGit使用中有时会用到的一个技巧,强制覆盖本地.EGit强制覆盖远端(其实没有这个说法),在另一篇文章中写了http://www.cnblogs.com/guodongdidi/p/48 ...

  6. windows安装zookeeper单机版

    1.在apache的官方网站提供了好多镜像下载地址,然后找到对应的版本,目前最新的是3.4.6下载地址:http://mirrors.cnnic.cn/apache/zookeeper/zookeep ...

  7. SEAndroid安全机制简要介绍和学习计划

    与iOS相比.Android最被人诟病的是其流畅性和安全性. 然而,从4.0開始,Android不遗余力地改善其流畅性. 特别是在即将公布的L版本号中,用ART替换了Dalvik,相信会越来越流畅.至 ...

  8. printf回到上一行开头以及回到本行开头的方法

    回到上一行开头 #include <stdio.h> #include <unistd.h> int main(void) { ; ){ printf("%d\n&q ...

  9. CSS换行:word-wrap、word-break和text-wrap差别

    一.word-wrap:同意对长的不可切割的单词进行切割并换行到下一行.(中英文处理效果一样) word-wrap有两个取值: 1.word-wrap: normal:仅仅在同意的断字点换行(浏览器保 ...

  10. [翻译] UIView-draggable 可拖拽的UIView

    UIView-draggable 可拖拽的UIView https://github.com/andreamazz/UIView-draggable UIView category that adds ...