HTTP REST一些设计想法

      我们已经习惯性的在创建各种软件的时候,习惯性第一时间考虑分布式构想(比如那些实现CORBA、Web服务协议栈和J2EE的平台)。在这篇文章里,我将以XCD项目现状的框架结构分享一下我们把支撑Web运行的协议和文档格式视为一种应用平台,一种可通过轻量级中间件访问的平台。虽然我们没有将Rest独立出来,但是我们提供了可以独立部署的支持。

引言

      我们知道,集成领域是不断变化的。Web的影响以及敏捷实践的潮流正在挑战我们的关于“良好的集成由什么构成”的观念。集成(integration)并不是一种夹在系统之间的专业活动;与此相反,现在,集成是成功方案里的不可缺少的一部分。

       然而,仍有许多人误解并低估Web在企业计算中的作用。即便是那些精通Web的人士,也常常要花费很大力气才能懂得,Web不是关于支持XML over HTTP的中间件方案,也不是一种简易的RPC机制。这是相当遗憾的,因为Web不是仅能提供简单的点对点连接,它还有更大的用处;它实际上是一个健壮的集成平台。

什么是HTTP REST

REST是一套用来创建Web Service的方法。

REST式的Web Service的主旨是让事情尽量的简单化。

REST式的Web Service使用HTTP里的方法:GET, POST, DELETE, PUT。你不需要使用URL或请求的内容来指定这个方法。

REST式的Web Service使用HTTP状态码作为返回值。

REST式的Web Service调用产生的HTTP请求内容只是用于服务数据不是用来指明调用方法,目标对象或返回值的。

使用REST方法来开发Web Service的关键点是利用HTTP协议的简单性,而不是去扩展这个协议。你的Web Service调用最终应该是非常的简单而且非常的易于理解。

举例来说,以这道题的url来讲:

http://www.xcd.com,表示全网可见,在http://www.xcd.com这个包里

query就是函数名(当然,我们也可以追加模块)

123456789是路径参数,表示订单编号

当我回答你使用GET获得订单信息,我输入的URL中就输入订单编号,然后返回DATA给你。

当不同的平台通过HTTP 请求平台,服务器收到的http响应就是GET重载下的返回值

当然了,REST的运用是非常灵活的,以上只是对标准模式下的一种描述。

XCD项目如何设计restful的

在说XCD项目如何使用restful的时候,在这里要感谢朱曦等公司提供帮助的同事。

XCD项目的restful使用的是Spring 的restful,对于为什么使用spring restful是因为spring restful上手快和开发简单。并且因为整体开发框架使用的都是Spring。所以集成业很方便。

对于XCD项目对于restful设计原则有二个,并且二种风格完全不同。

一种是以我为主的订单模块和虚拟库存这块的,(PS:如果被马波知道一定又要被他说不听他的了)

另外一种是以我负责的模块以为的其他模块。

先说我的设计原则,Controller 入口一个,URL多个,将Controller当前路由,通过动态URL,并且通过适配器模式进行使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

举一个🌰(例子)

订单查询:订单查询分为买家订单查询,卖家订单查询,买手销售订单查询,买手囤货订单查询。

买家订单查询:买家通过自己的ID和Code获得自己所有下过的订单信息。

卖家订单查询:卖家通过自己的ID和Code获得自己所有的销售过的订单信息

买手销售订单查询:买手通过自己的ID和Code获得自己销售过的订单信息

买手囤货订单:买手通过自己的ID和Code获得自己囤过哪些货物

PS:这里面我们先不考虑分页等情况,但是考虑不同的订单类型(订单类型分:标准分销订单,标准买手囤货订单,第三方标准订单,第三方买手囤货订单,标准买手销售订单,第三方买手销售订单)

对内我的功能编号就一个:ISO151416。

按照开发原则我们的Controller也就是一个(ISO151416Controller)。因为我们设计的表在一套表中,所以对于业务而言,我只是关联的表可能不同并且返回的信息也不同,但是主表还是相同的。那么我们对于开发者而言,说简单点就是SQL不同。参数不同。

对外我的restful时4个。

分别是买家订单查询,卖家订单查询,买手销售订单查询,买手囤货订单。这样拆分对于调用者是简单清晰的。因为一个对应一个。

其实这种方式是在第一版本上面进行延伸的,因为当初设计的时候其实对外URL或者叫接口只有一个,然后不同的页面调用通过传入不同的参数。然后进行查询操作。但是这种方式会让调用者产生疑问。无法分辨。

在这里说明一点因为我们的所有的参数格式都是JSON格式,所以对内我们的参数是一套,但是提供给调用者是四套参数。每一种查询是不同的。如果我们在这边为了数据或者数据安全性参数验证。可以通过不同的验证类进行处理。

还一种方式,我们的设计原则是,将每一个功能的颗粒度最小话,然后将每一个功能设计一套Controller,Service,SQL出来。

举一个🌰(例子)

订单查询:订单查询分为买家订单查询,卖家订单查询,买手销售订单查询,买手囤货订单查询。

买家订单查询:买家通过自己的ID和Code获得自己所有下过的订单信息。

卖家订单查询:卖家通过自己的ID和Code获得自己所有的销售过的订单信息

买手销售订单查询:买手通过自己的ID和Code获得自己销售过的订单信息

买手囤货订单:买手通过自己的ID和Code获得自己囤过哪些货物

PS:这里面我们先不考虑分页等情况,但是考虑不同的订单类型(订单类型分:标准分销订单,标准买手囤货订单,第三方标准订单,第三方买手囤货订单,标准买手销售订单,第三方买手销售订单)

对内我们有买家标准分销订单,买家第三方订单,卖家第三方销售订单,卖家标准分销订单,买手标准囤货订单,买手第三方囤货订单,买手标准销售订单,买手第三方销售订单查询接口。

每一个接口的参数不同,然后处理一套Controller,Service,SQL。

这样的好处是将每一接口最小化,修改影响范围最小化。

对于这二种方式没有绝对的好或者坏,不同的设计人员对应设计的理解和认知不同而已。

关于Restful文档的编写

在写这个的时候,我可能又要被马波同学说了,因为我很多的时候不听马波的话,按照自己的想法做事,也就是典型的不听话的孩子(我永远18岁),其实这个是我的问题,因为当初设计这个Restful文档的时候我没有参与进去,一开始我就没有接接口开发这块。所以没怎么在意。哈哈哈。现在有说别人的文档不怎么好,是不是很贱啊。

我认为的接口文档应该包含以下几点。

1.请求URL

2.请求方式(POST,GET等)

3.参数类型(application/json或者application/xml)

4.功能描述

5.输入参数(包含参数说明,格式,实例)

6.输出参数(包含参数说明,格式,实例,异常情况和正常情况)

7.实例:请求实例返回实例。如果有时间应该也包含异常情况

其实微信API接口可以作为我们参考的。

为什么突然想写这个呢,因为我们需要积累和学习。

在这里分享一个《如何获取(GET)一杯咖啡——星巴克REST案例分析

学无止境,每天记录一点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,400评论 0 19
  • 你有没有灵魂出窍的时刻?有没有过失魂落魄的感觉?我的记忆里有比较真实诡异的事件,略陈一二。半夜准备睡觉的胆小的朋友...
    边景阅读 779评论 0 0
  • 这本书是强调游戏化实践的工具书,提出了常见的游戏化目标和可使用的设计框架,很有启发性。基本上掌握以下六种,就可以搞...
    Sting阅读 524评论 1 2
  • 潘雨馨,10月21日,第十一次读书打卡。今天我读了三国演义第171-184页,本章讲述的主要人物是周瑜,周瑜是三国...
    潘雨馨阅读 190评论 0 0
  • 第四章 监控 急匆匆的栾娜来到医院楼下的停车场,刚打开车门一阵电话铃声传来,栾娜掏出手机看到是弟弟栾勇打来的。栾娜...
    长弓探生阅读 233评论 0 0