rails 3 学习笔记(一)
... 5
一、Rails之外的几个基本的概念
1、什么是web框架?
所谓框架就是制定好了一套规范和惯例,让开发者在该架构下进行开发。
维基百科对软件框架(software framework)的定义如下:
软件框架通常指的是为实现某个业界标准或完成特定基本任务的软件组件规范,也只为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说就是使用别人搭好的舞台,你来做表演。
web框架是指用来促进web开发而存在的一个一系列标准库(libraries)、开发工具(tools)以及约定(conventions)的集合。
一个好的web框架常常具有如下特点:
a、Full stack:满栈性,web框架应该包含完成一个完整的web应用所需要的一切东西,这通常需要通过安装很多软件包和做各种各样的配置来实现,另外框架中的各个Layer之间应该能够实现无缝的连接。
b、Open source:开源性
c、Cross-platform:跨平台性(platform- independent)
一个好的web框架通常能给开发人员带来如下便利:
a、A palce foreverything:一个好的web框架应当具有很好的架构(structure)和一些便利的约定,这样在开发过程中应用程序的每一部分都有其明确的存在位置,这就嫌少了臆测工作并能提高开发效率。
b、A databaseabstraction layer:一个好的web框架能够自动处理底层的数据库工作,并能够在几乎所有的数据库上运行良好。
c、A cultureand aesthetic to help inform programming decision:一个好的web框架能够表达自己的观点:通过一些约定来引导你,并帮你做出一些困难的决定,他通过帮你决定一些低级的问题来让你专注于更重要的事情上
2、什么是ruby?
ruby是一种简单快捷的面向对象的动态的脚本语言。它在20世纪90年代由日本的松本行弘开发。
ruby具有如下特点:
• Aninterpreted, object-oriented scripting language:解释性、面向对象的脚本语言
• Elegant,concise syntax:语法高雅简洁
• Powerfulmetaprogramming features:强大的与程序特色
• Well suited as ahost language for creating DSLs:非常适合作为创造DSL(domain-specific language)的宿主语言(host language)
• dynamic,open source, cross-platform and so on:动态、开源、跨平台等
3、什么是敏捷开发?
Agile Manifesto:敏捷宣言
• Individuals andinteractions over processes and tools:个体和交互 胜过 流程和工具
• Working softwareover comprehensive documentation:可以运行的软件胜过 详尽的文档
• Customercollaboration over contract negotiation:客户的合作 胜过 合同谈判
• Respondingto change over following a plan:响应变化胜过 因循计划
尽管右项有其价值但是敏捷开发更重视左项的价值。
传统开发过程:与客户确定合同后在初期制定并遵循基于活动的完整计划,在重型过程与工具的指导下,通过完成大量文档进行知识传递,最后交付需求。
敏捷开发过程:开发团队与客户密切协作,通过高度迭代式、增量式的软件开发过程响应变化,并在每次迭代结束时交付经过编码与测试的有价值的软件。
敏捷开发的十二项原则:
• 最重要的目标是:通过持续不断地加早交付有价值的软件使客户满意
• 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化
• 经常地交付可工作软件,相隔几星期或一两个月,倾向于采用较短周期
• 业务人员和开发人员必须相互合作,项目中的每一天都不例外
• 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
• 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
• 可工作的软件是进度的首要度量标准。
• 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
• 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
• 以简洁为本,它是极力减少不必要工作量的艺术。
• 最好的架构、需求和设计出自自组织团队。
• 团队定期地反思如何能提高成效,
• 并依此调整自身的举止表现。
4、什么是REST?
REST是表征状态转移(RepresentationalState Transfer)的简称,它是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
REST是设计风格而不是标准,REST在本质上是一个可以被许多不同技术实现的高层次的风格,可以被实例化,REST通常基于使用HTTP、URI、XML以及HTML这些现有的广泛流行的协议和标砖。正如:web、http、URI可以看成是REST风格的一个主要实现。
REST从资源的角度观察整个网络,分布在各处的资源由统一资源标识符URI确定,而客户端的应用通过URI来获取资源的表征,获得这些资源的表征致使这些应用程序转变了其状态。随着不断获取资源的表征客户端应用不断地转变着其状态,所谓表征状态转移(Representational State Transfer)并不是凭空臆造的,而是通过观察当前互联网的运作方式而抽象出来的。Roy Fielding认为:“涉及良好的网络应用表现为一系列的网页,这些网页可以看做是虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展示给使用的人,而这正代表了状态的转变。”
REST的设计概念和准则:
a、 网络上所有的事物都被抽象为资源(resource)
b、 每个资源对应着唯一的资源标识符(resource identifier)
c、 通过通用连接器接口(genericconnector interface)对资源进行操作
d、 对资源的各种操作不会改变资源标识符
e、 所有操作都是无状态的(stateless)
或者:Five keyprinciples of REST
- Give every “thing” an ID
- Link things together
- Use standard methods
- Resources with multiple representations
- Communicate statelessly
对REST的实现者之一web应用来说:资源(resource)的含义并不是数据而是数据加特定的表现形式(representation);resource identifier就是URI(统一资源标识符),它用来指定资源;generic connector interface是HTTP,对资源进行的操作包括获取、创建、删除、和修改,这些操作正好对应HTTP提供的GET、POST、PUT和DELETE方法,另外是通过操作资源的表形来操作资源的,而资源的表现形式则一般是XML或者HTML这取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器,当然也可以是其他任何的格式;d是指我们常说的URL不变性。
REST的要求:
l 客户端和服务器结构
l 连接协议具有无状态性
l 能够利用Cache机制增进性能
l 层次化的系统
关于状态:
注意区别应用的状态和连接协议的状态:REST对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。
RESTful Web服务:
RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:
- URI,比如:
http://example.com/resources/
- Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等
- Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)
下表列出了在实现RESTful Web 服务时HTTP请求方法的典型用途。
资源 | GET | PUT | POST | DELETE |
一组资源的URI,比如: http://example.com/resources | 列出URI,以及该资源中每个资源的详细信息 | 使用给定的一组资源替换当前整组资源 | 在本资源组中创建/追加一个新的资源,该操作往往返回新资源的URI | 删除整组资源 |
单个资源的URI,比如: http://example.com/resource | 获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) | 替换/创建 指定的资源,并将其追加到相应的资源组中。 | 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 | 删除 指定的元素。 |
REST的优点:
- 可以利用缓存Cache来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好