==============================================================================
Rails是标准的基于MVC模型进行开发的Web框架,给行业带来巨大冲击的是它的接口设计。
Rails一个重要的设计理念就是约定优于配置,无需配置,按照缺省的风格就可以完成基本的功能,这样的理念贯穿在Rails各个接口的设计中。
理解接口应该先找主线,找到项目主线的一个方法就是从起步走文档开始,因为它会把项目最基本的用法展现给你,你可以轻松地找到主线。
Rails的起步走文档做得就非常好,主线可以说是一目了然。它用了一个Web项目帮你介绍了Rails开发的基本过程,通过这个过程,你就对Rails有了初步的印象。
有了主线之后,我们就要开始从中了解接口的风格。Rails给我们提供的三种接口,分别是:
Web应用对外暴露的接口:REST API;
程序员写程序时用到的接口:API;
程序员在开发过程中用到的接口:命令行。
接下来,我们就一个个地深入其中,了解它们的风格,以及它们给行业带来的不同思考。
REST 接口
先说应用对外暴露的接口:REST API。REST如今已经成为很多人耳熟能详的名词,它把Web 的各种信息当作资源。既然是资源,它就可以对这些Web信息做各种操作,这些操作对应着HTTP的各种动词(GET、POST、PUT、DELETE等)。
REST是为了纠正大家对HTTP的误用。 REST刚出来的时候,开发者普遍觉得这是一个好的想法,但怎么落地呢?没有几个人想得清楚。
Rails对REST的使用方式做了一个约定。只要你遵循Rails的惯用写法,写出来的结果基本上就是符合REST结构的,也就是说,Rails把REST这个模型用一种更实用的方式落地了。
Rails.application.routes.draw do
…
resources :articles
…
end
在用Rails写程序的时候,你只要添加一个resource进去,它就会替你规划好这个资源应该如何去写、怎么设计URL、用哪些HTTP动词,以及它们对应到哪些方法。
$ bin/rails routes
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root GET / welcome#index
看了Rails给你的这个映射关系后,你就知道自己该怎么写代码了。这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。
=====================================================================
我们再来看API接口。当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句:
Article.find_by_title(“foo”)
要知道,那个时候用Java写程序,即便是想做一个最简单的查询,写的代码也是相当多的。我们不仅要创建一个对象,还要写对应的SQL语句,还要把查询出来的结果,按照一定的规则组装起来。
而 Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现的,Rails会替你自动实现。当我们需要有更多的查询条件时,只要一个一个附加上去就可以了。
Article.find_by_title_and_author(“foo”, “bar”)
从功能的角度说,这样的查询在功能上是完全一样的,但显然Rails程序员和Java程序员的工作量是天差地别的,就是不同的编程接口所造成的。
所以一个好的接口设计会节省很多工作量,会减少犯错的几率。因为它会在背后帮你实现那些细节。
而设计不好的接口,则会把其中的细节暴露出来,让使用者参与其中。写程序库和写应用虽然都是写代码,但二者的要求确实相差极大。把细节暴露给所有人,显然是一个增加犯错几率的事情。
Rails的API接口让人们开始关注API的表达性。比如,每篇文章可以有多个评论,用Rails的方式写出来是这样的:
class Article < ApplicationRecord
has_many :comments
…
end
而如果用传统Java风格,你写出来的代码,可能是这个样子的:
class Article {
private List comments;
…
}
“有多个”这种表示关系的语义用has_many表示更为直白,如果用List ,你是无法辨别它是一个属性,还是一个关系的。
Rails里面类似的代码有很多,包括我们前面提到的find_by。所以,如果你去读Rails写成的应用,会觉得代码的可读性要好得多。
由于Rails的蓬勃发展,人们也开始注意到好接口的重要性。
Java后期的一些开源项目也开始向Rails学习。比如,使用Spring Data JPA的项目后,我们也可以写出类似Rails的代码。声明一对多的关系:
class Article {
@OneToMany
private List comments;
…
}
而查询要定义一个接口,代码可以这样写:
interface ArticleRepository extends JpaRepository<Article, Long> {
Article findByTitle(String title);
Article findByTitleAndAuthor(String title, String author);
}
当你需要使用的时候,只要在服务里调用对应的接口即可。
class ArticleService {
private ArticleRepository repository;
…
public Article findByTitle(final String title) {
return repository.findByTitile(title);
}
}
显然,Java无法像Rails那样不声明方法就去调用,因为这是由Ruby的动态语言特性支持的,而Java这种编译型语言是做不到的。不过比自己写SQL、做对象映射,已经减少了很多的工作量。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/bb53ea8808876c4844c3080b5ba1c029.jpeg)
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入**
[外链图片转存中…(img-0qxmrPFB-1713736636199)]
[外链图片转存中…(img-sWVyBKJo-1713736636200)]
[外链图片转存中…(img-WZkFk8Zt-1713736636200)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!