本文目录一览:
- 1、为什么很多web应用的api都用json开发,和gsoap+webservice相比,它有哪些优缺点
- 2、WEB开发中,使用JSON-RPC好,还是RESTful API好
- 3、在 java web开发中怎么使用json?
为什么很多web应用的api都用json开发,和gsoap+webservice相比,它有哪些优缺点
json和soap+webservice是一种数据交互格式,目前所有的平台都对他们进行支持。json是以键值对的形式展现的长串,webservice交互的数据多为xml,就可读性和可扩展性而言,两种方式不相上下。编码的方便程度上json要稍微占点优势,没有xml那种多于的标签对。客户端在使用json串的的时候,只需要eval(),eval这个函数很多语言都有,比如js,as 等等。在维护方面维护一段xml串比一段json我想难度要大点
WEB开发中,使用JSON-RPC好,还是RESTful API好
两者没有高下之分,无非是一种约定俗成的标准。习惯用RPC就用RPC,能理解REST就用REST。
JSON-RPC比较符合直观,格式也相对宽松;
REST最近正流行,有自己的一套设计规范。
REST面对的疑问跟当年刚开始流行面向对象时的情况是一样的。
它适合很多情况,但并不适合所有情况。
最差的结果就是盲目跟风,又对REST的概念和理念一知半解,最后搞出一个半吊子的怪胎,还自我标榜用了流行的RESTful API。
REST是一种设计风格,它的很多思维方式与RPC是完全冲突的。
RPC的思想是把本地函数映射到API,也就是说一个API对应的是一个function,我本地有一个getAllUsers,远程也能通过某种约定的协议来调用这个getAllUsers。至于这个协议是Socket、是HTTP还是别的什么并不重要;
RPC中的主体都是动作,是个动词,表示我要做什么。
而REST则不然,它的URL主体是资源,是个名词。而且也仅支持HTTP协议,规定了使用HTTP Method表达本次要做的动作,类型一般也不超过那四五种。这些动作表达了对资源仅有的几种转化方式。
这种设计思路是反程序员直觉的,因为在本地业务代码中仍然是一个个的函数,是动作,但表现在接口形式上则完全是资源的形式。
就像面向对象的「万物皆对象」理论在习惯了纯粹面向过程开发的程序员眼里显得十分别扭一样:我的代码本来就是按顺序、循环、分支这么运行的啊,为啥非得在很明确的结构上封装一层一层的基类子类接口,还要故意给两个函数起同一个名字,调用时才选择用哪一个呢?
使用「万物皆资源」的思想编写实际项目中的API接口时,最常见的问题就是「这玩意到底是个什么资源?………………算了,我就直接写吧,不管什么风格了」
比如,login和logout应该怎么REST化?
比如,多条件复合搜索在GET里写不下怎么办?
比如,大量资源的删除难道要写几千个DELETE?
其实在理解了REST后,这些都不是什么无解的难题,只是思维方式要转换一下:
login和logout其实只是对session资源的创建和删除;
search本身就是个资源,使用POST创建,如果不需持久化,可以直接在Response中返回结果,如果需要(如翻页、长期缓存等),直接保存搜索结果并303跳转到资源地址就行了;
id多到连url都写不下的请求,应该创建task,用GET返回task状态甚至执行进度;
……等等等。
如果只是规定了一种规范,却不理解它表相下面的思维方式,实施中又按照自己的理解随意变动,那结果肯定是混乱不堪的。
当然,API怎么写是开发者的自由。但如果一个API在url里放一堆动词、资源设计混乱、各种乱用HTTP Method和Status Code,还自称RESTful API的话,那就像你养了一条狗,还管它叫猫一样。
这种混搭产物,不如叫它REFU吧。
(Remove Extension From Url:从url里去掉文件扩展名)
前面说了半天REST的理念和不懂REST造成的问题,但是,这并不代表REST比RPC更「高等」,更不是说不理解REST的人是落伍的。
所谓代码风格、接口形式、各种林林总总的格式规定,其实都是为了在团队内部形成共识、防止个人习惯差异引起的混乱。JSON-RPC当然也是有规范的,但相比REST实在宽松太多了。
如果一个开发团队规定必须在url里写action,所有请求都是POST,可以吗?当然也没问题,只是不要拿出去标榜自己写的是RESTful API就行。
规范最终还是为了开发者和软件产品服务的,如果它能带来便利、减少混乱,就值得用;反之,如果带来的麻烦比解决的还多,那就犯不上纯粹跟风追流行了。
在 java web开发中怎么使用json?
一、JSON建构有两种结构:
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。在Java中就是一种Map结构。
2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。在Java中是一种list结构。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
二、Json in Javascript
使用Json语法创建对象
var people = {"name":"jack","sex":"mail"};
可以通过这种语法创建json对象,用“{}”括起来,用“,”隔开key:value
使用Json语法创建数组
var arr =[value1,value2...];
一个包含多个people的数组 peoples = [{"name":"jack","sex":"mail"},
"name":"lily","sex":"femail"};
Json数组可以通过这种语法创建,用"[]"括起来,数组元素之间用“,”分隔开,下面是这种语法的示意图:
在使用Json格式字符串与服务器交互时候,可以利用Json扩展的方法将字符串转换成一个JavaScript对象,或者将一个对象转换成Json格式字符串。不过先要登录下载Json2.js文件。引入该包后,js对象直接用toJSONString()装换为字符串格式,字符串可以用parseJSON()转换成js对象。
访问数据
只需用点号表示法来表示数组元素。所以,要想访问 上面peoples列表的第一个条目的名字,只需在 JavaScript 中使用下面这样的代码:
peoples[0].name
利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。
修改数据
正如可以用点号和方括号访问数据,也可以按照同样的方式轻松地修改数据:
peoples[0].name = "Rachmaninov";
在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。