仓酷云

标题: JAVA网页编程之再谈RESTAPI最好理论仓酷云 [打印本页]

作者: 兰色精灵    时间: 2015-1-18 11:17
标题: JAVA网页编程之再谈RESTAPI最好理论仓酷云
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。近一年半,我介入了两到三个项目标事情,这些项目触及到大批供“内部”利用的RESTAPI,稍后我们会看到为何要将“内部”这个词放在引号当中。在项目事情时代,我不能不对这些API举行重复地计划,再计划和重构,这篇文章是我对RestAPI最好理论的一些团体意见,但愿读者可以从中获益。
更好、更早地计划

关于良多言语来讲,完成RESTService是一项极为微乎其微的义务。换言之,不管你选择甚么底层框架,只需辅以大批设置和代码,你能够在一小时以内就具有一个RESTService。固然关于缺少履历的人来讲,这的确很便利,但它也很简单让你敏捷写出一个质量低下的API。因而,在你编写代码之前,先留出一分钟的工夫思索一下,试着往计划你的API,花充足的工夫往了解营业范围,判别客户端必要从你的体系中猎取甚么。举个例子,假如你的体系是针对一群硬币保藏家所创建的数据库,此时你必要决意的是:你是不是同意客户端增加新的硬币,大概仅仅同意掏出原本的硬币;客户必要甚么样的查询体例;假如赶上触及大批数据检索的哀求,你怎样处置它?尽早地回覆这些成绩可以匡助你开辟出更切近用户需求的API。
称号与办法

如今已很有多关于资本(Resource)定名和构造的会商了,在这里我基于本人的履历再老调重弹一下,以下是三种易于遵守的标准。
1.只利用名词:举个例子,假如你想供应一项在数据库中搜刮硬币的服务,要制止将端点(Endpoint)定名为/searchCoins或/findCoins或/getAllCoins等等,一个复杂的/coins就已充足了,当客户端发送一个GET哀求的时分,能够取得一切无效硬币的汇合。相似的,假如你想供应一项在数据库中增加硬币的服务,要制止利用诸如/addCoin或/saveCoin或/insertCointToDatabase如许的称号,你可使用与下面不异的资本称号,要改动的仅仅是用POST哀求取代GET哀求。一样地,关于更新硬币,可使用PUT哀求。
2.假如必要猎取单个硬币,又应当怎样做呢?我所倡议的最好体例是在端点中到场一个参数,好比说客户端必要拿到一个ID是20的硬币,那末发送一个哀求到/coins/20就充足了。我们再来看一个更庞大的例子,假如要让客户端可以为每一个硬币增加一张图片,一个疾速而丑恶的体例是/addCoinImage或/addNewImageToCoin等等,一个稍好一点的体例是/coins/addImage,可是正如我之前所说的,不该该有任何动词存在。还记得我们之条件到的猎取某种硬币的办法吗?我们能够将其略微加强一下,发送POST哀求给/coins/20/images怎样?今朝看起来很不错。不外世界没有完善的事物,假定一下,假如我们要让一些超等用户可以从体系中删除硬币,依据我们之前的会商,一个复杂的DELETE哀求发送给/coins/{id}就充足了,可是请你想一下,假如{id}仅仅是COINS表中的一个按次编号,那会发生多年夜的成绩?或人能够容易地一个接一个的发送DELETE哀求,最初体系中一切的数据全没了。我想说的重点是,利用标识符作为哀求参数是不错,可是条件是这些标识符必需很难推测或基本没法推测。以是,假如你想要用一串序号往断定一个实体,那就忘了这类完成吧。我的倡议是,不要利用资本参数,间接发送一个DELETE哀求给/coins,分离一个requestbody(好比json),个中含有充足的参数可以定位所要被删除的实体便可。
3.尽量利用特定范畴的称号。假如你的营业域中有一群硬币保藏家(CoinCollectors),那末当你计划API的时分,应该利用collectors这个词,而不是users或accounts。要制止利用一些意义过于广泛的称号,这些称号不克不及暗示甚么,到了客户端又简单发生曲解。关于哀求参数的定名,事理也是一样的。别的,激烈倡议给哀求参数取一个尽量短,同时又成心义的称号,举个例子,假如你想要查找在某一指定年份刊行的硬币,一个很赞的参数称号是issueYear,对照典范的反例是:year(意义不明白),yearOfFirstIssue(包括无用信息)。
毛病处置和呼应

关于这个话题,我的履历是让客户端在每次发送哀求后,不管了局是乐成仍是失利,都能取得不异格局的json呼应,这将会给客户端处置带来极年夜的匡助。举个例子,你想要增加一个新的硬币,向/coins发送POST哀求,一个乐成的呼应包括以下json文档:
1
2
3
4
5
6
7
8
{
"meta":{
"code":200
},
"data":{
"coinId":"a7sad-123kk-223"
}
}

一个毛病的呼应多是如许的:
1
2
3
4
5
6
7
8
9
{
"meta":{
"code":60001,
"error":"Cannotaddcoin",
"info":"Missingoneoremorerequiredfields"
},
"data":{
}
}

请注重,对一切大概的了局(乐成或失利),json呼应的文档都具有不异的布局,个中有两种基础元素:meta和data,meta包括了局信息,在堕落的情形下,个中还会包括一个特别的毛病码(errorcode),在毛病码以后,”error”暗示堕落的内容,”info”暗示堕落的详细形貌;data是可选的,包括从服务器前往的一切数据,就拿下面的例子来讲,当增加硬币乐成后,服务器会前往一个独一的主动天生的标识符,假如有毛病,这项就为空。这类做法的上风是,关于统一个API的各类服务范例和了局,客户端都能够接纳不异的体例举行处置。别的,当成心外情形产生时,我们也能够传送一些分外的信息,正如下面例子中所展现的,”error”转达信息,”info”纪录日记。我们另有一种选择,能够基于毛病码去向理呼应,只需明白每一个数字的寄义便可,请注重这些数字并不是http形态码,你仍然要为每一个哀求前往准确的http形态码(如400、401等)。
在我们会商下一节之前,我想夸大另外一件值得器重的事,假定我们不同意删除硬币,可是客户端实验向/coins/{id}发送一个DELETE哀求,一般情形下Web容器会前往一个405的形态码,但我发明,假如我们对这些呼应举行过滤并前往不异的json文档,会很有匡助。好比我们能够前往:
1
2
3
4
5
6
7
8
9
{
"meta":{
"code":405,
"error":"Methodnotallowedforthe/coins/{id}resource",
"info":"MethodDELETEisnotallowedforthatresource.Availablemethods:GET,POST,OPTIONS"
},
"data":{
}
}

这比本来很多多少了,不是吗?如今,呼应内容不仅包括原本的信息(405形态码),还关照客户端该资本可用的办法。

java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。
作者: 爱飞    时间: 2015-1-20 19:18
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 因胸联盟    时间: 2015-1-23 16:16
是一种为 Internet发展的计算机语言
作者: 不帅    时间: 2015-1-26 07:40
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 柔情似水    时间: 2015-1-28 05:41
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 莫相离    时间: 2015-1-30 23:40
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 蒙在股里    时间: 2015-2-6 17:03
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 灵魂腐蚀    时间: 2015-2-17 11:01
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 变相怪杰    时间: 2015-2-21 06:11
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 透明    时间: 2015-2-23 19:48
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者: 仓酷云    时间: 2015-3-7 10:02
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者: 分手快乐    时间: 2015-3-14 19:58
是一种突破用户端机器环境和CPU
作者: 老尸    时间: 2015-3-21 13:38
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2