`

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 for everything :一个好的 web 框架应当具有很好的架构 (structure) 和一些便利的约定,这样在开发过程中应用程序的每一部分都有其明确的存在位置,这就嫌少了臆测工作并能提高开发效率。

b A database abstraction layer :一个好的 web 框架能够自动处理底层的数据库工作,并能够在几乎所有的数据库上运行良好。

c A culture and aesthetic to help inform programming decision :一个好的 web 框架能够表达自己的观点:通过一些约定来引导你,并帮你做出一些困难的决定,他通过帮你决定一些低级的问题来让你专注于更重要的事情上

 

2 、什么是 ruby

 

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: 动态、开源、跨平台等

 

3 、什么是敏捷开发?

 

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 :响应变化 胜过 因循计划

尽管右项有其价值但是敏捷开发更重视左项的价值。

 

传统开发过程: 与客户确定合同后在初期制定并遵循基于活动的完整计划,在重型过程与工具的指导下,通过完成大量文档进行知识传递,最后交付需求。

敏捷开发过程: 开发团队与客户密切协作,通过高度迭代式、增量式的软件开发过程响应变化,并在每次迭代结束时交付经过编码与测试的有价值的软件。

 

敏捷开发的十二项原则:

 

       最重要的目标是:通过持续不断地加早交付有价值的软件使客户满意

欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化

       经常地交付可工作软件,相隔几星期或一两个月,倾向于采用较短周期

       业务人员和开发人员必须相互合作,项目中的每一天都不例外

激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。

       不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。

         可工作的软件是进度的首要度量标准。

  敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。

         坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。

         以简洁为本,它是极力减少不必要工作量的艺术。

         最好的架构、需求和设计出自自组织团队。

         团队定期地反思如何能提高成效,

         并依此调整自身的举止表现。

 

4 、什么是 REST

 

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 认为:“涉及良好的网络应用表现为一系列的网页,这些网页可以看做是虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展示给使用的人,而这正代表了状态的转变。”

 

REST 的设计概念和准则:

 

a、  网络上所有的事物都被抽象为资源( resource

b、  每个资源对应着唯一的资源标识符( resource  identifier

c、  通过通用连接器接口( generic connector interface )对资源进行操作

d、  对资源的各种操作不会改变资源标识符

e、  所有操作都是无状态的( stateless

 

或者: Five key principles 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

获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XMLJSON 等)

替换/ 创建 指定的资源,并将其追加到相应的资源组中。

把指定的资源当做一个资源组,并在其下创建/ 追加一个新的元素,使其隶属于当前资源。

删除 指定的元素。

 

 



REST 的优点:

 

  • 可以利用缓存 Cache 来提高响应速度
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在 HTTP 协议之上的机制, REST 的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好
2
0
分享到:
评论

相关推荐

    rails查询学习笔记

    NULL 博文链接:https://citi21558541.iteye.com/blog/437132

    rails _sunspot 学习笔记

    sunspot 学习笔记-安装以及使用,另外还有部分crontab插件的安装以及使用,适用与rails3

    ruby on rails环境搭建学习笔记;passenger+nginx环境配置

    本人学习ruby on rails 的开发和部署过程中的环境搭建的笔记 基本涵盖了ruby开发中用到的所有软件的安装 也给自己留个存档

    Ruby_on_Rails笔记

    此文档我学习Ruby on Rails技术的综合 ,有读书笔记、心得自创教程一些问题解决经验统分门别类集技术的综合 ,有读书笔记、心得自创教程一些问题解决经验统分门别类集技术的综合 ,有读书笔记、心得自创教程一些问题...

    ruby on rails 笔记(陈刚)

    学习笔记,是入门新手的好教材!分享给大家!

    Ruby On Rails开发从头来系列教程(chm)

    一边读着《Agile Web Development with Rails》的英文电子版,一边写随笔,并且尽量写的简单明了些,对于具体的细节概念倒没有做深入的研究,所以,这一系列也是《Agile Web Development with Rails》的读书笔记...

    ruby on rails实现的一个简单的评论demo

    哭不知道还有多少人在用ruby,rails的资源也少的可伶,这个是个基础的学习用的demo,可以下载参考一下,慕课网上也有老师对应的教程,我以后会在这里写一些学习笔记,如果还有人在用ruby,大家抱团取暖吧哭哭哭~~~~~...

    rails-study:学习滑轨

    笔记编程Ruby Ruby元编程 Ruby on Rails教程 敏捷Web开发Rails 5 附注4(21-24) 杂项Ruby其他注释Rails杂项说明上传文件说明注意事项Sidekiq注意Webpacker注意相关的其他项目及笔记: 资本主义研究耙研要学习: ...

    雨松MOMO程序研究院

    iTween研究院之学习笔记Move移动篇(一) Android研究院之应用程序对话框大合集(一) Cocos2D研究院之构建游戏开发环境(一) Direct3D研究院之创建第一个DirectX3D项目(一) NGUI研究院之开始学习制作第一个...

    ruby-rails-note:Ruby练习

    读我 Ruby on Rails学习笔记 Ruby练习 Ruby方法 Rails 6.0笔记

    jungle-rails:用Rails 4.2构建的一个小型电子商务应用程序,用于通过示例学习Rails的目的

    丛林Jungle是一个使用Ruby 2.3.5&Rails 4.2构建的小型电子商务应用程序。 由于这个项目,我了解了有关Ruby on Rails,模型-视图-控制器范例,嵌入式Ruby和测试(TDD和BDD)的更多信息。笔记: 已知问题:来宾(未经...

    ruby_on_rails_learning:我的RoR笔记本

    Ruby on Rails学习笔记自从我还是一名初级开发人员以来,这就是我的回购协议。 我还有另一个仓库可以分享我在当今日常工作中的想法。 周海萌@ 2014〜2018

    l-曲线matlab代码-Notes:日常学习笔记,什么都会有w

    有关SDRAM以及DDR的工作原理学习笔记,见 2020.09.09添加 在安装了Linux的PC端构建并使用QEMU运行ARM Linux,见 2020.09.20添加 ARM汇编,学习记录 信号与系统以及DSP,学习记录 数字电路以及verilog,学习记录 2020...

    tdd-rails-pluralsight:使用RSpec,Capybara和Cucumber以及Pluralsight课程学习Rails的TDD

    具有RSpec,Capybara和Cucumber的测试驱动Rails 我在TDD Rails上的Pluralsight 课程中的笔记。 常用命令命令描述bin/rails s 启动Rails服务器bin/rails c 启动Rails控制台bundle exec rake routes 列出所有路线bin/...

    padrino-note:基于 Sinatra 的 Padrino Web 框架学习笔记

    Study notes for Padrino web framework英文名:Study notes for Padrino web framework中文名:Padrino学习笔记简介在使用Ruby语言的Web开发框架中,Rails和Sinatra是最流行的两个。由于Sinatra只提供了Web开发最...

    website:用Ruby On Rails开发的烹饪食谱网站

    覆盆子厨师 历史 Raspberry Cook是一个始于2015年9月的项目。第一个想法很简单:尝试在不知情的情况下构建Web应用程序。 为了使其更有趣,我想在Raspberry Pi B +上... 我打破了所有结果,将其转换为Ruby On Rails Fr

    编程狂人第九期(2014-1-20)

    Android 学习笔记之 SQLite基础用法 如何充分利用 Windows Phone 高清屏幕 【cocos2d-x 手游研发----博彩大转盘】 后端架构 回顾2013:HBase的提升与挑战 memcached(十七)协议命令格式 nginx大流量负载调优 12306...

    谷歌师兄的leetcode刷题笔记-cv:Github简历

    谷歌师兄的leetcode刷题笔记杰德·霍普金斯 阅读关于我的一切。 | | | | | 我是前 EMEA 团队负责人,之前为 Google 完成合同工作,后来转到了阴暗面,正在 Makers Academy 学习编码。 在 Google 工作期间,我在欧洲...

    cliqr:学生一窍不通 一款学习应用出现 点击学习

    使用这个应用程序,学生可以在他们迷失演讲主题时谨慎地向演讲者指示,同时可以选择提出一个简短的问题或做一个简短的笔记。 讲师们一眼就能确定在讲座中任何给定点的整体理解水平,并能够在该点采取纠正措施以澄清...

    Web-Development:一个包含基本Web开发工具(例如HTML,CSS,Javascript,Node.js,Ruby on Rails,PHP,CoucheDB等)上的项目的存储库

    Web开发包含有关基本Web开发工具的项目的...在此应用中,您可以做笔记,并且笔记不会消失,直到用户刷新它为止。使用AJAX框架JavaScript Project:Github Profile Finder。 Twitter标头:使用HTML和CSS的Twitter标头。

Global site tag (gtag.js) - Google Analytics