在对Restful服务框架做对比前,主要先说说Restful设计的三大主要元素:以资源为核心的资源方法、资源状态、关系链接超媒体表述。 辅助的有内容协商、安全、版本化设计等。

Jersey作为Java界比较主流的RestfulWeb服务框架,Django做了Python界比较主流Web开发框架,选择在其基础上构建的Django Rest framework,对这两者做一简单的技术选型对比调研(花了两个下午的时间把两者的官方文档读了一遍)。

Jersey主要特性:

1、基于Restful Resource设计的注入式开发模型
2、多部署方式
3、客户端API支持
4、响应式编程支持
5、表述状态支持与响应
6、数据实体的序列化与反序列化设计
7、对于JSON、XML、Multipart三种基本媒体类型的支持
8、过滤器(面向请求与响应)与拦截器(面向数据输入输出流)
9、服务器端和客户端的异步支持
10、对URI安全生成的支持
11、声明式超媒体支持
12、编程式动态生成资源
13、Server-Sent Event支持
14、安全支持特性
15、WADL支持
16、声明式Bean数据验证
17、面向数据视图的实体数据过滤
18、MVC模板
19、应用监视与故障诊断
20、定制注入器与应用生命周期管理
21、Jersey容器自身CDI支持
22、对Spring DI的集成支持

23、Jersey单元测试框架

Django Rest framework的主要特性:

1、Django-Rest的Serializer除了串行和反串行之外还有数据验证的功能,相当于结合了之前的表单数据解析(Json.loads)、Json.dumps.、form.is_valid,而且文档里说它的功能作用主要类似于Djang中的Form.

2、Request和Response做了面向Rest的改造,API View的Response组件内涵内容协商特性来自动确定返回数据的媒体格式等特征。

3、ViewSet和Router的特性将大幅度减少大多数常规API的代码,ViewSet类似于Resource,Router类似于Application Controller。

4、Django-Rest有大量的第三方支持包。

Django Rest framework的特性细节内容展开:

1、面向Restful定制设计的Request

2、面向Restful定制设计的Reponse

3、面向Restful API定制设计的API View

4、内建通用型API View

5、定义式的ViewSet,极大简化面向Model资源的编程

6、Router:集中管理ViewSet,快读生成Restful可用API

7、Parsers:各种媒体格式的解析器

8、Renderers:各种媒体格式生成器

9、Serializers:在python数据类型和媒体格式之间的序列化中介

10、Serializer fields:Serializer的字段定义

11、Serializer relations:model关系的序列化

12、Validators:序列化数据验证器

13、Authentication:用户登录验证

14、Permissions:访问权限验证

15、Throttling:基于多重访问数据维度的访问控制

16、Filtering:基于定义配置的数据集动态过滤

17、Pagination:各种各种分页机制支持

18、Versioning:内建的各种版本化机制支持

19、Content negotiation:内建内容协商机制支持

20、Metadata:API元数据表述

21、Format suffixes:URL媒体格式后缀支持

22、Returning URLs:URL反向获得机制

23、Exceptions:各种异常处理支持机制

24、Status codes:资源HTTP状态支持

25、Testing:内建自动化测试机制支持

总体来说:

1、Django-Rest更向上层业务建模靠拢,而Jersey更多是从底层实现封装做起。从设计上讲:前者更偏向业务实现,后者更偏向技术封装。

2、虽然Jersey已经大量使用Java注解等方式简化资源式编码方式,但Django-Rest的开发方式更接近定义式编程方式。所以Django-Rest的编码肯定要比Jersey的少的多。

3、从实现业务服务API的角度讲:Django-Rest的使用方便快捷简易程度应该优于Jersey.

Jersey VS Django-Rest的更多相关文章

  1. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. django server之间通过remote user 相互调用

    首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...

  4. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  5. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  6. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  7. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  8. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  9. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

随机推荐

  1. 摆脱命令行,Ubuntu下配置Android开发环境

    作者:宋志辉 微博:weibo.com/askzhihui/ 安装所需工具 一.新立得 新立得(Synaptic)是Debian和Ubuntu Linux操作系统的包管理工具apt的图形化前端. 它结 ...

  2. GDAL库中WFS服务中含有中文不能获取数据的问题

    GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...

  3. 05_学生管理系统,xml读写,布局的综合应用

     最终要做的项目目标: 2.编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf ...

  4. Leetcode_6_ZigZag Conversion

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41408021 看完这篇文章,你可能会学到到知识如下: (1 ...

  5. Live555 直播源 以及MediaSubsession

    /* * H264DeviceSource.hh * * Created on: 2014年7月19日 * Author: zjzhang */ #ifndef H264DEVICESOURCE_HH ...

  6. 集群通信组件Tribes之整体介绍

    接下来一系列文章会对集群通信框架tribes进行源码级别的分析,欢迎讨论. 把若干机器组合成一个集群,集群为了能协同工作,成员之间的通信是必不可少的,当然可以说这也是集群实现中重点需要解决的核心问题, ...

  7. Java四种引用类型

    纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 Java从1.2版本开始引入了4种引用,这四种引用的级别由高到低依次为:强引用>软引用>弱引用 ...

  8. Unity热更新之C#反射动态获取类属性及方法

    如果我们要为发布出去的游戏更新一些功能,但又不想让用户重新下载整个游戏包,只让他下载我们更新的资源包,用assetBundle打包资源的方式是可以的,但其中有个最大的例外,那就是脚本. 虽然asset ...

  9. Android通过编译源代码提供系统服务-android学习之旅(85)

    通过编译android4.1.2的源代码,添加一个FregServer的系统服务,以及一个服务代理FregClient 具体分为三部分,client,common,server,common中规定了c ...

  10. Unix/Linux中的read和write函数

    文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读或写一个文件时,使用open或creat ...