node.js是一个让javascript运行在服务端的开发平台
nodejs开放了js的能力, 让它可以访问文件, 读取数据库, 可以访问进程, 所以可以做后端
https://blog.csdn.net/lucky_lxg/article/details/54575515
Node.js采用C++语言编写而成,是一个Javascript的运行环境。为什么采用C++语言呢?据Node.js创始人Ryan Dahl回忆,他最初希望采用Ruby来写Node.js,但是后来发现Ruby虚拟机的性能不能满足他的要求,后来他尝试采用V8引擎,所以选择了C++语言。
Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。
Node.js是一个后端的Javascript运行环境(支持的系统包括*nux、Windows),这意味着你可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行
https://www.jianshu.com/p/3416a0bf309c
http://www.cnblogs.com/meteorcn/p/node_mianshiti_interview_question.html
客户端通过请求URL,传递参数,去获取指定的数据,这就是API(ApplicationProgramInterface)。
API是前端和客户端操作后端数据的一种方式,一种接口。当一个Web应用以API的方式对外提供功能和接口时,整个应用的架构模式是这样的:
但是,URL怎么约定,参数以什么编码方式传,响应数据的格式是什么样的,以及响应码怎么约定,API版本升级怎么设计,这些问题是设计这些API的后端人员不得不考虑的问题。
2000年,Roy Fielding博士在论文中提出REST(Representational State Transfer)风格的软件API架构模式。该模式对上面的问题提出了针对性的解决方案,迅速被大家接受,逐渐流行起来。
REST是一种API的设计模式,它将数据库的数据看做是一个个的资源。客户端的请求就是对这些资源的操作,这些操作无外乎增删改查四种。这种模式简单易读,易于维护。
这种设计模式提倡我们遵循以下原则。
REST提倡数据格式应该使用轻量级,易于阅读的json格式。这要求我们除了GET
请求方式外,其他请求方式的请求体都应该是json,响应体也是json。 所以,请求头和响应头的Content-Type
都应该为application/json
。
REST将请求看做是对某个资源的增删改查操作,正好对应了Http请求的GET
,POST
, PUT
, DELETE
4种请求方法。 对应关系如下:
获取资源:GET
方式
创建资源:POST
方式
更新资源:PUT方
式
删除资源:DELETE
方式
REST提倡声明式的URL设计。URL设计需要考虑层次化,可扩展,易于维护。每一个URL都表示对某个资源的操作,假设我们要操作服务器的博客数据,可以这样设计:
通用的资源操作方式:
// 获取所有博客
GET /api/blogs
// 获取指定博客
GET /api/blogs/1234
// 创建博客
POST /api/blogs
// 更新指定博客
PUT /api/blogs/1234
// 删除指定博客
DELETE /api/blogs/1234
资源的过滤操作,使用查询参数来限定条件:
// 分页获部分博客
GET /api/blogs?page=1&size=15&sort=time
按层次组织资源:
// 获取某个博客下面的所有评论
GET /api/blogs/143/comments
层次化的设计有可能会让URL太长,不便于阅读,比如:
// 获取某个博客下面的某个评论的某个回复
GET /api/blogs/123/comments/12343/replys/2231
所以,我们也可以使用扁平化的方式设计所有的资源:
// 获取某个博客的所有评论,使用查询参数来限定条件
GET /api/comments?blogId=123
// 获取某个评论的所有回复
GET /api/replys?commentId=123
API的版本升级。 我们的API会不断的更新迭代,比如:获取所有订单的URL参数多加了一个时间戳。如果我们直接更改原来接口的逻辑,会导致旧版本的客户端获取失败。因此,通过添加一个路径/v1
来让我们的API更加维护性。
// 获取所有订单, 第一版
GET /api/v1/orders
// 获取所有订单, 第二版
GET /api/v2/orders
响应设计分为数据结构设计和响应码设计。
响应数据结构设计
客户端对资源的操作有可能成功,也有可能失败。以前我一直使用使用这样的数据结构:
{
code: 1/0, // 会有很多标识码,11, 12, 13 ...
msg: "获取成功/获取失败",
data: [...]/{}
}
整体的结构一定不能变,数据的变化体现在data
字段。这样非常方便客户端的解析或者序列化(静态语言)。
响应码设计
响应码分为http响应码和逻辑响应码。http响应码很简单,如果成功就200,服务器出错就500。而逻辑响应码则是需要自己来定义,比如:1表示用户不存在,2表示密码错误。
前后端分离最极致作法是:前端和后端各自独立编写,独立部署,通过API接口进行交互。他们看起来像这样:
200 OK 服务器成功处理了请求(这个是我们见到最多的) |
301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置 |
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存 |
404 Not Found 未找到资源 |
501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务 |
①.各自原理
前提当然是要搞懂这两者的联系了
三层架构是最基本的项目分层结果,而MVC则是三层架构的一个变体,MVC是一种好的开发模式。
首先你要明白MVC分别代表的是什么意思.
三层:UI 界面层 BLL 业务逻辑层,DAL数据访问层,Model 实体层
MVC中的的M 不是三层中的Model(实体层),他其实包括三层中的 BLL,DAL,Model,这是非常要注意的,这也是他们之间的区别的关键所在
三层是基于业务逻辑来分的,而mvc是基于页面来分的
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的WEB层,也就是说,MVC把三层架构中的WEB层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话
②.区别之处