打PS4打cf用什么耳机好好

[Playframework文档中文翻译] Play 框架概述 - 爪哇岛的天空 - ITeye技术网站
Play 框架概述
(原文链接:
有别于其他臃肿的企业级 Java 框架,简洁的 Play 框架提供另外一种选择,它关注于开发者的效率和 RESTful 风格的架构。Play 是 敏捷软件开发
的完美伴侣。
Play 框架的目标是让基于 Java 的 web 应用开发变得更加容易,让我们看一下它是怎么做到的。
想不想看看代码?
,或者直接从
Play 是一个纯 Java 的框架,它让你保持使用你喜欢的开发工具和类库。如果你已经是一个使用 Java 平台的开发者,
那么你不需要切换到另一种语言,其他 IDE 或者其他类库, 而仅仅是切换到一个效率更高的 Java 环境!
Java 平台因为较低的开发效率,已经是声名狼藉了,主要的原因就是重复和繁琐的“编译-打包-部署”的周期。
这就是为什么我们重新对这种开发周期进行了思考,并且通过 Play 让开发变得更有效率。
Play 框架自动编译 Java 源代码,然后直接热加载到 JVM 中而不需要重启服务器。你可以编辑代码,框架自动重新加载,然后直接就看到修改后的结果,就像在 LAMP 或者 Rails 环境中一样。
更有趣的是你可以根据自己的喜好,仅仅使用一个简单的文本编辑器进行开发,而不需要使用功能齐备的 Java IDE。
当有错误发生时,框架会尽最大的努力,辨别并显示出错误信息。
Play 甚至对 Java 堆栈跟踪信息进行优化,以便帮助你更容易地解决问题。看看 Java 堆栈跟踪是如何展示模板的执行过程的。
简单的无状态的 MVC 架构
想想,你在一端有一个数据库,另一端是一个浏览器,为什么非要在两者之间存在一个状态呢?
基于有状态和组件式的 Java Web 框架使我们很容易自动保存页面状态,但是这带来了很多其他问题:如果用户打开了第二个窗口时会发生什么?如果用户单击了浏览器的后退按钮呢?
PHP,Ruby on Rails 和 Django 等许多 Web 应用框架促进了
架构的发展。随着浏览器愈来愈强大,现在很容易使用 Ajax,或者离线存储去解决客户端的状态问题。
我们不再需要为了在 web 上重建一个伪造的状态而去 hack HTTP 模型。
的另一方面好处是,可以更加容易地并行地渲染页面的各个部分,更容易地是实现页面局部更新(渐进式增强)。
果你使用过另外一种 Java Web 框架,例如 Servlet API 或者 Struts 框架,那么你已经看到了一个把 HTTP 协议和
Java API 以及一些奇怪的概念关联起来的抽象体系。Play 和它们想的不同,一个 Web 应用框架应该让你可以完全地直接地访问 HTTP
协议,这是 Play 和其他 Java Web 框架的一个根本性区别。
HTTP 协议,请求/响应模式,REST 架构风格,
,统一资源标识符(URI) 都是 Play 框架涉及的主要概念。
例如,绑定一个 URI 模式到 Java 调用只需要这样一行:
/clients/{id}
Clients.show
如果 Ajax,REST 风格和在页面之间维护前进/后退操作,是你在日常的 web 开发工作中需要面对的问题,那么请给 Play 一个机会吧。
们很喜欢 JSP 和 表达式语言背后的思想,但是为什么我们需要这么多的配置文件才能创建一个标签库呢?为什么我们不能完全地访问对象模型呢? JSP
有很多的约束,这的确令人沮丧。这就是为什么我们创建了一个自定义的模板系统,灵感来自 JSP ,但是没有它的那些约束。
你,还有其他人,应该已经疲倦了写类似这样的代码:
&%@ taglib uri="/jsp/jstl/core" prefix="c" %&
&%@ taglib uri="/jsp/jstl/functions" prefix="fn" %&
&c:choose&
&c:when test="${emails.unread != null && fn:size(emails.unread)}"&
You have ${fn:size(emails.unread)} unread email(s)!
&c:otherwise&
You have no unread emails!
&/c:otherwise&
&/c:choose&
我们认为,你一定更喜欢这样写:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
Play 模板引擎使用的表达式语言是
,它的语法和 Java 一致。 Play 主要使用模板引擎来渲染 HTML 内容,不过你同样可以使用它去生成其他内容,例如 email 邮件消息,JSON 等等。
JPA 持久化
持久化接口( Java Persistence API )是一个简洁的 Java 版的 ORM 框架,如果你使用过 JPA ,你会惊讶于它在
Play 框架中变得如此简单。不需要任何配置,Play 会自动启动 JPA 实体管理器,并在代码发生修改时自动地同步。
而且如果你使用 Play 提供的 play.db.jpa.Model
作为超类时,它会帮助你把代码写得更漂亮。来看一下:
public void messages(int page) {
User connectedUser = User.find("byEmail", connected()).first();
List&Message& messages = Message.find(
"user = ? and read = false order by date desc",
connectedUser
).from(page * 10).fetch(10);
render(connectedUser, messages);
测试驱动开发(如果你喜欢)
集成的测试可以让你更容易的去进行测试驱动开发 (Test-Driven Development) ,你可以写下各种类型的测试,从简单的单元测试到完整的 acceptance 测试,然后直接在浏览器中使用
运行测试。代码覆盖率也会被考量。
Play 框架的最初灵感是来自于我们自己的 Java 应用。它包含了创建一个现代 Web 应用所需要的所有工具,包含:
支持 JDBC 的关系数据库
基于 Hibernate ( JPA 接口 ) 的对象-关系映射框架( ORM )
集成的缓存支持,易用的分布式缓存系统( memcached )
简单直接的提供 JSON 和 XML 的 Web Service 服务(我们说的是 真正
的 Web Services,而不是 SOAP 之类)
支持使用 OpenID 进行分布式的身份认证
可以将 Web 应用部署到任何地方(应用服务器,GAE ,云服务,等等)
图像处理 API
Play 模块化的架构使你可以把你的 Web 应用和其他很多的模块组合起来。多亏了应用模块(
),利用它你能够以一种非常简单的方式重用你的 Java 代码,模板,静态资源(如 JavaScript 和 CSS 文件)。
尝试一下吧
,然后开始开发你的第一个应用吧。
(原文链接:
浏览: 88529 次
来自: 杭州
spirngMVC,只需要在Controller类加上@Exc ...
* firefox 31,不会hold,请求后服务器直接传输数 ...
IE更烂,他不是hold住了,他会向服务器发起两次请求,服务器 ...
对Play暂时保持观望态度,play和django很类似吧。
源码可以发给我参考下吗?fj_匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。RESTful API 设计指南 - 阮一峰的网络日志
RESTful API 设计指南
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。
因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现的设计思想。是目前比较成熟的一套互联网应用程序的API设计理论。我以前写过一篇,探讨如何理解这个概念。
今天,我将介绍RESTful API的设计细节,探讨如何设计一套合理、好用的API。我的主要参考了两篇文章(,)。
API与用户的通信协议,总是使用。
应该尽量将API部署在专用域名之下。
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
三、版本(Versioning)
应该将API的版本号放入URL。
另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。采用这种做法。
四、路径(Endpoint)
路径又称"终点"(endpoint),表示API的具体网址。
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。
举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。
/v1/animals
/v1/employees
五、HTTP动词
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面五个(括号里是对应的SQL命令)。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
还有两个不常用的HTTP动词。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
下面是一些例子。
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
六、过滤信息(Filtering)
如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
下面是一些常见的参数。
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。
七、状态码(Status Codes)
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
状态码的完全列表参见。
八、错误处理(Error handling)
如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。
error: "Invalid API key"
九、返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
十、Hypermedia API
RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
比如,当用户向的根目录发出请求,会得到这样一个文档。
{"link": {
"collection /zoos",
"title": "List of zoos",
"application/vnd.yourformat+json"
上面代码表示,文档中有一个link属性,用户读取这个属性就知道下一步该调用什么API了。rel表示这个API与当前网址的关系(collection关系,并给出该collection的网址),href表示API的路径,title表示API的标题,type表示返回类型。
Hypermedia API的设计被称为。Github的API就是这种设计,访问会得到一个所有可用API的网址列表。
"current_user_url": "/user",
"authorizations_url": "/authorizations",
从上面可以看到,如果想获取当前用户的信息,应该去访问,然后就得到了下面结果。
"message": "Requires authentication",
"documentation_url": "/v3"
上面代码表示,服务器给出了提示信息,以及文档的网址。
十一、其他
(1)API的身份认证应该使用框架。
(2)服务器返回的数据格式,应该尽量使用JSON,避免使用XML。
树莓派(Raspberry Pi)是学习计算机知识、架设服务器的好工具,价格低廉,可玩性高。
服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。
WebSocket 是一种网络通信协议,很多高级功能都需要它。
今年三月,微软宣布 Edge 浏览器将支持 CSS 变量。第三方登录:

我要回帖

更多关于 开车用蓝牙耳机打电话 的文章

 

随机推荐