`
江南白衣
  • 浏览: 549836 次
  • 来自: 广州
社区版块
存档分类
最新评论

轻的,谁都会写的Service方案--REST与JSON

阅读更多

1.REST

1.1 缘起

    N年前,一说到跨平台的服务方案,大牛们就想到"Socket Server",小兵们就一直退,退到会议室的墙角。
    几年前,一说到跨平台的服务方案,连客户都会想到"Web Service"。
    现在,是个人都可以,在几分钟里,使用REST风格把一个服务的客户端和服务端写出来。

1.2 初见 

    REST首先是一个词,然后代表了一种服务提供模式。嗯,圣贤说,任意服务协议,都可以拆成传输协议,服务模式,数据格式三维表达,那REST就是依赖http作为传输机制,request-reponse模式,数据是预先协商好的任意格式。

    结果,任何语言的客户端,随便用一个http库访问某个URL,将请求信息写成XML或JSON或纯字符串,放在POST实体中。服务端也任意的实现一个servlet甚至jsp/asp/php,接收客户端发过来的请求,返回XML/JSON/字符串的结果就完了。

   So Easy,心里是不是立刻就想到了实现的方式。Java里用Apache的HttpClient  发送一个POST请求。

HttpClient httpClient = new HttpClient();
EntityEnclosingMethod method = new PostMethod(url); method.setRequestBody(fooXml);
method.setRequestHeader("Content-type","application/xml; charset=utf8"); 
httpClient.executeMethod(method); 
String body = method.getResponseBodyAsString(); 

    另外一个XML/JSON的操作库,严重推荐codehaus的xstream ,很漂亮的在xml/json和java对象间转换。比其他重型的xml binding方案便捷得多,下面是xml与java对象互转的代码。

Xstream  xs = new Xstream(); 
String xml = xs.toXML(foo);
Foo foo = (Foo)xs.FromXML(xml);  

    .Net下面就更简单,http库和xml库都自带了。
     这是个最吸引人的地方,就是REST里,写服务不再是一个框架级的事情,不再需要配置文件和回调函数,只要懂几个API,甚至API都不要,白手DIY出服务来。InfoQ的这篇文章不错:Simple JAVA and .NET SOA interoperability

  1.3 主义

    罗喧说,REST是面向消息(资源)的简单交互逐步替代RPC。真正的REST有如下的主张:

  1.4 代价

    当然,REST简单也有简单的代价,比如缺乏了事务、可靠性、WS-Address、UDDI等机制。不过这些机制在正统的WebService世界里使用的也不多。对于那些没有使用任何附加机制的纯WebService,都可以考虑用REST编写,或者像DIY事务 一样自己设计协议。

   另外需要客户自解释Payload,或是依靠Server方提供的SDK,而不能从直接WSDL生成DTO,WADL 尚无定论。

   最后,REST除了作为Service方案,还可以作为Web应用MVC方案,比如Cetia4(https://cetia4.dev.java.net/ )就叫板替代传统的MVC框架,不过我觉得又搞一堆框架后,简单就渐渐失去意义了,加上最近都不搞Web应用,花半天看完它的教程文档后,不再关注。

2.JSON

   JSON简介(dev2dev) 。如果有大数据量的传输,JSON(JavaScript Object Notation),是对XML尤其是SOAP中复杂XML的简化。如:

   {"product":{"name":"Banana","id":"123","price":"23.0"}}

     每种语言都有N种JSON解释器 。XStream也用Jettison 做driver,支持Java对象与JSON的序列化,建立XStream对象时将参数改为Jettision就可以了,其他操作与XML一样,见JSON Tutorial

    XStream xstream = new XStream(new JettisonMappedXmlDriver());

    无独有偶,Apache CXF(XFire)也用Jettison支持Web Service使用JSON格式,详见它的JSON Support 。

 

参考资料:

  • Architectural Styles and the Design of Network-based Software Architectures(中文版) REST起源的论文,dlee翻译。
  • 《RESTful Web Services》  2007
  • 深入浅出REST(InfoQ)
  • Building scalable, reliable, secure, RESTful services(JavaZone 2007)
  • 分享到:
    评论
    7 楼 galaxystar 2007-08-09  
    ajax+rest挺合适做产品的.
    6 楼 yongyuan.jiang 2007-08-09  
    通过http直接获得服务非常好,跨平台,跨项目。 <br />
    当然也不是万能的,对于局域网内的机器便无法适用。
    5 楼 steeven 2007-08-07  
    json.org里面有几个很搞笑的方法:optXxx()...
    getXxx()则抛异常。

    json是个好东西,rest应该就是个url约定吧,有必要小题大做吗?
    4 楼 wutao8818 2007-07-09  
    被json org 的 api 愚弄过,后来发现不是那么回事。没我想的美
    3 楼 dwangel 2007-06-23  
    json 的网站 http://json.org/

    开始研究ajax中……
    2 楼 fins 2007-06-21  
    <p>我也正要问2楼问的那个问题 呵呵 </p>
    <p>希望有人可以写一篇java下json组件/类库的总结评测文章.</p>
    <p>&nbsp;</p>
    1 楼 totobacoo 2007-06-21  

    为什么不提 org.json 或者 json-lib, 也很好用啊

    相关推荐

      Laravel开发-exist-db-rest-client

      学习并运用这个项目,开发者可以扩展Laravel的应用场景,使其能够更好地与exist-db这样的XML数据库配合工作,特别是在处理大量结构化数据时,提供了一种高效、灵活的解决方案。同时,这也展示了如何通过Laravel的...

      ServiceNow-REST-API-Client-Samples:示例客户端,以多种语言针对ServiceNow REST API发出请求

      ServiceNow是一个广泛使用的IT服务管理平台,它提供了一个强大的RESTful API来允许开发者通过编程方式与平台交互。...这将有助于他们构建更高效、更可靠的集成解决方案,将ServiceNow的功能与其他系统或应用无缝对接。

      Jquery+JSON+REST WCF DEMO

      在"RestDemo.sln"中,包含整个项目的解决方案,可能包括一个或多个项目,如Web服务项目(WCF Service Library)和Web应用程序项目(ASP.NET Web Application)。"RestDemo"可能是Web服务的命名空间或者服务类的名称...

      WCF 返回json 格式

      当我们需要在WCF服务中返回JSON(JavaScript Object Notation)格式的数据时,主要是为了满足现代Web应用程序的需求,因为JSON是一种轻量级、易于读写的数据交换格式,常用于Ajax通信。 要创建一个返回JSON格式数据...

      magnolia-subscriber-rest-endpoint

      《构建订户REST端点:Java技术在行动》 在当今的互联网环境中,API已经成为连接不同服务和系统的重要桥梁。REST(Representational State Transfer)作为一种常见的API设计风格,以其简洁、灵活的特点备受开发者...

      REST与SOAP WEB SERVICE的区别1

      REST通常使用JSON,轻量且易于解析。 3. **状态管理**:SOAP是无状态的,每次请求都需要包含所有信息;REST利用HTTP状态码和缓存机制,更符合Web的无状态原则。 4. **方法与资源**:SOAP通常只有一个POST方法进行...

      nestjs-api-rest-demo

      - `nestjs-api-rest-demo-master`目录很可能包含以下结构:`src`、`dist`、`node_modules`、`package.json`等。`src`是源代码目录,可能包括`app.module.ts`(主模块)、`app.controller.ts`(主控制器)、`app....

      D:\医保\wcf测试\RestService.zip

      在压缩包内的“RestService.sln”通常是一个Visual Studio解决方案文件,它包含了项目的配置和引用,可以用来打开和编译整个WCF服务项目。而“RestService”可能是服务的主项目文件或者服务接口的实现。 解决WCF...

      tutorial-java-rest-google:Java REST 客户端到 Google Search API 的示例文件

      虽然Google Search API可能不再是长期可行的解决方案,但这个教程仍然可以帮助开发者掌握与各种REST API交互的通用技巧,这对于现代Web开发来说是至关重要的技能。同时,这个过程中的挑战,如处理认证和解析JSON,也...

      Uplod-File-to-Amzon-S3-using-Node-REST-API

      Amazon S3(Simple Storage Service)是亚马逊云服务提供的一个高可用、可扩展的存储解决方案,用于存储和检索数据。用户可以通过 API 调用来管理对象(文件),并利用其安全性和持久性特性。 在 Node.js 中,我们...

      ctakes-rest-service:基于JSON的休息服务,可通过智能自然语言处理系统处理非结构化的临床文本

      该解决方案的目标是提供一种基于JSON的REST服务,以通过智能自然语言处理系统以快速,准确和易于设置的方式处理非结构化的临床文本。 请注意,安装说明是针对本地环境设计的,没有提供有关安全云/服务器部署的指南。...

      mpos_bankend:mpos_backend dart null-safety web service provide json rest API for MPOS use 基于dart 空安全开发的为mpos提供json rest风格接口数据的后端服务

      JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,是REST API中常用的数据传输格式。 在mpos_bankend项目中,API可能包括如下关键接口: 1. 用户注册...

      alura-api-rest:Spring Boot API REST-JPAHibernate

      《Spring Boot API REST-JPAHibernate 实现详解》 在当今的软件开发中,构建高效、可扩展的Web服务已经成为一种常态。Spring Boot以其强大的功能和便捷的开发体验,成为了Java领域构建RESTful API的首选框架。本文...

      Rest WCF资源文件

      - **数据格式(Data Formats)**:REST服务通常支持JSON或XML格式的数据交换,方便与各种客户端进行通信。 6. **实现RESTful WCF的步骤** - 创建WCF服务项目。 - 定义服务接口和实现,使用OperationContract标记...

      rest-rpc 简单易用的rpc框架 C++11

      `rest_rpc`是一个基于C++11开发的轻量级RPC(Remote Procedure Call)框架,它将RESTful API的设计理念与RPC技术相结合,为开发者提供了一种简单且高效的远程调用解决方案。本文将深入探讨`rest_rpc`的核心特性、...

      REST-adapter-service:无需维护的存储库。 开发移至

      联合X-Road Rest Adapter Service开发该存储库将成为的REST / JSON支持解决方案的所在地。 联合开发的任务是基于。 开发和资源库在爱沙尼亚和芬兰之间共享。 以下是在2014年12月18日举行的Skype会议上发起合作的人员...

      rest-sso.rar

      【标题】"rest-sso.rar" 提供的是一款基于RESTful API的SSO(Single Sign-On,单点登录)解决方案的源代码。SSO是一种网络访问控制机制,允许用户通过一次登录验证,即可访问多个相互信任的应用系统,而无需再次进行...

      ROP(Rest Open Platform)开发指南

      这两种格式的选择与应用场景密切相关,JSON因其轻量级和易读性而被广泛采用。 2. **异常描述体系**:REST服务的交互完全依赖于报文,因此无论是正常的响应还是异常情况,都需要通过报文来传达。这就要求设计一套...

      Service-Oriented+Vehicle+Diagnostic+SOVD

      Service-Oriented Vehicle Diagnostic (SOVD) 是一种创新的车载诊断解决方案,旨在提供标准化的、统一的途径来访问车辆中的高能效计算平台(HPC)及其相关应用程序的诊断信息,同时也支持传统的电子控制单元(ECU)...

    Global site tag (gtag.js) - Google Analytics