????? 花了一周多的时间把《Beginning Rials 3》这本书从头到尾看了一遍,并按照树上的教程自己动手跟着做了一遍,搭出了一个简单的博客网站。感觉收获蛮大的,对rails 3的整体架构以及各个部件的具体实现有了一个整体的了解,对rails3中的一些基本概念和一些重要的知识点(比如:routes、ORM、RSET等)也有了较为深入的理解。感觉现在的问题主要在于对这些知识还只是处于一个理解或者了解的地步,离熟练运用还很有一段距离。为了巩固知识点和增加熟练程度我决定对之前看过的东西做一个系统而全面的整理和总结。由于是初学rails 3希望能与大家进行交流,也请大家对我总结的东西多多的批评指教。
?
?
?
所谓框架就是制定好了一套规范和惯例,让开发者在该架构下进行开发。
?
维基百科对软件框架( 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 for everything :一个好的 web 框架应当具有很好的架构 (structure) 和一些便利的约定,这样在开发过程中应用程序的每一部分都有其明确的存在位置,这就嫌少了臆测工作并能提高开发效率。
b 、 A database abstraction layer :一个好的 web 框架能够自动处理底层的数据库工作,并能够在几乎所有的数据库上运行良好。
c 、 A culture and aesthetic to help inform programming decision :一个好的 web 框架能够表达自己的观点:通过一些约定来引导你,并帮你做出一些困难的决定,他通过帮你决定一些低级的问题来让你专注于更重要的事情上
?
?
ruby 是一种简单快捷的面向对象的动态的脚本语言。它在 20 世纪 90 年代由日本的松本行弘开发。
ruby 具有如下特点:
???????? ? An interpreted, object-oriented scripting language :解释性、面向对象的脚本语言
???????? ? Elegant, concise syntax :语法高雅简洁
???????? ? Powerful metaprogramming features :强大的与程序特色
? Well suited as a host language for creating DSLs :非常适合作为创造 DSL(domain-specific language) 的宿主语言 (host language)
???????? ? dynamic, open source, cross-platform and so on: 动态、开源、跨平台等
?
?
Agile Manifesto :敏捷宣言
? Individuals and interactions over processes and tools :个体和交互 胜过 流程和工具
? Working software over comprehensive documentation :可以运行的软件 胜过 详尽的文档
???????? ? Customer collaboration over contract negotiation :客户的合作 胜过 合同谈判
???????? ? Responding to change over following a plan :响应变化 胜过 因循计划
尽管右项有其价值但是敏捷开发更重视左项的价值。
?
传统开发过程: 与客户确定合同后在初期制定并遵循基于活动的完整计划,在重型过程与工具的指导下,通过完成大量文档进行知识传递,最后交付需求。
敏捷开发过程: 开发团队与客户密切协作,通过高度迭代式、增量式的软件开发过程响应变化,并在每次迭代结束时交付经过编码与测试的有价值的软件。
?
敏捷开发的十二项原则:
?
?????? ? 最重要的目标是:通过持续不断地加早交付有价值的软件使客户满意
? 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化
?????? ? 经常地交付可工作软件,相隔几星期或一两个月,倾向于采用较短周期
?????? ? 业务人员和开发人员必须相互合作,项目中的每一天都不例外
? 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
?????? ? 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
?????? ? ? 可工作的软件是进度的首要度量标准。
? ? 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
?????? ? ? 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
?????? ? ? 以简洁为本,它是极力减少不必要工作量的艺术。
?????? ? ? 最好的架构、需求和设计出自自组织团队。
?????? ? ? 团队定期地反思如何能提高成效,
?????? ? ? 并依此调整自身的举止表现。
?
?
REST 是表征状态转移( Representational State Transfer )的简称,它是 Roy Fielding 博士在 2000 年他的博士论文中提出来的一种软件架构风格。
REST 是设计风格而不是标准 , REST 在本质上是一个可以被许多不同技术实现的高层次的风格,可以被实例化, REST 通常基于使用 HTTP 、 URI 、 XML 以及 HTML 这些现有的广泛流行的协议和标砖。正如: web 、 http 、 URI 可以看成是 REST 风格的一个主要实现。
?
REST 从资源的角度观察整个网络,分布在各处的资源由统一资源标识符 URI 确定,而客户端的应用通过 URI 来获取资源的表征,获得这些资源的表征致使这些应用程序转变了其状态。随着不断获取资源的表征客户端应用不断地转变着其状态,所谓表征状态转移( Representational State Transfer )并不是凭空臆造的,而是通过观察当前互联网的运作方式而抽象出来的。 Roy Fielding 认为:“涉及良好的网络应用表现为一系列的网页,这些网页可以看做是虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展示给使用的人,而这正代表了状态的转变。”
?
?
a、? 网络上所有的事物都被抽象为资源( resource )
b、? 每个资源对应着唯一的资源标识符( resource? identifier )
c、? 通过通用连接器接口( generic connector interface )对资源进行操作
d、? 对资源的各种操作不会改变资源标识符
e、? 所有操作都是无状态的( stateless )
?
或者: Five key principles of REST????????
?
?
对 REST 的实现者之一 web 应用来说:资源( resource )的含义并不是数据而是数据加特定的表现形式( representation ); resource? identifier 就是 URI (统一资源标识符),它用来指定资源; generic? connector? interface 是 HTTP ,对资源进行的操作包括获取、创建、删除、和修改,这些操作正好对应 HTTP 提供的 GET 、 POST 、 PUT 和 DELETE 方法,另外是通过操作资源的表形来操作资源的,而资源的表现形式则一般是 XML 或者 HTML 这取决于读者是机器还是人,是消费 web 服务的客户软件还是 web 浏览器,当然也可以是其他任何的格式; d 是指我们常说的 URL 不变性。
?
l? 客户端和服务器结构
l? 连接协议具有无状态性
l? ?? 能够利用Cache 机制增进性能
l? 层次化的系统
?
?
关于状态:
注意区别应用的状态和连接协议的状态: REST 对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。
?
?
RESTful Web 服务(也称为 RESTful Web API )是一个使用HTTP 并遵循REST 原则的Web 服务。它从以下三个方面资源进行定义:
http://example.com/resources/
?
下表列出了在实现RESTful Web 服务时HTTP 请求方法的典型用途。
资源
GET
PUT
POST
DELETE
?
一组资源的URI ,比如:
http://example.com/resources
列出URI ,以及该资源中每个资源的详细信息
使用给定的一组资源替换当前整组资源
在本资源组中创建/ 追加一个新的资源,该操作往往返回新资源的URI
删除整组资源
?
单个资源的URI ,比如:
http://example.com/resource
获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML 、JSON 等)
替换/ 创建 指定的资源,并将其追加到相应的资源组中。
把指定的资源当做一个资源组,并在其下创建/ 追加一个新的元素,使其隶属于当前资源。
删除 指定的元素。
?
?
?