一、前后端分离的优缺点 :
为什么要前后端分离 ?
1.pc、app、pad多端适应
传统的后端 模板生成模式只适用于 pc 端,其他的做起来比较麻烦。
2.SPA开发 模式 开始流行
SPA 是指单页面应用程序
3.前后端开发职责不清
django 的 template 是前端写还是 后端写?
4.开发效率问题,前后端互相等待
5.前端一直配合着后端,能力受限
6.后台开发语言和模板高度耦合,导致开发语言严重依赖
前后端分离缺点: 【文档再前后端分离的系统中非常重要】
1.前后端学习门槛增加
2.数据依赖导致文档的重要性增加
后端怎么交互给前端一般 都是通过 文档 来完成的
3.前端工作量加大
4.SEO的难度加大
SEO 是指搜索引擎优化,前后端分离就意味着前端的 整个页面全部是用
ajax 或网络来 请求的,这样对爬虫来说,如果请求 html 源码,
则获取不到数据,因为数据是通过 ajax 请求的, 所以爬虫爬
这个页面的时候只能拿到一些标签,拿不到数据,
这样虽然 在 某种程度上防止了一些初级的爬虫,但是同时也将一些
搜索引擎(百度、360等)的爬虫也拒之门外了,所以他们就没法把你
往前排 了。 【虽然前后端分离也有专门的策略 (SSR) 解决 SEO 】
5.后端开发模式迁移增加成本
二、restful api
restful api目前是前后端 分离最佳实践 (他是一个标准 ,不是框架)
1.轻量,直接通过 http,不需要额外的协议,post/get/put/delete 操作
2.面向资源 ,一目了然,具有自解释性
3.数据描述简单,一般通过 json 或者 xml 来做数据通信
restful api 重要概念
1.概念 http://www.ruanyifeng.com/blog/2014/05/restful_api.html
2.实践 https://blog.csdn.net/xiangzhihong8/article/details/53957550
Rest实践
一般资源操作只有新增、删除、查询、更新,对应HTTP协议中四类请求:POST、DELETE、GET、PUT。但在使用Rest的时候往往需要注意:
- 使用场景,Restful风格特别适合于异构系统之间的调用,另外在分布式场景中也比较适用。比如现在移动端APP的接口设计很多都采用这种风格,另外有不少云平台提供的服务接口也大多采用Restful风格设计。
- 框架支持,以Java版本的为例。Java对于Restful有一个规范定义JAX-RS,而支持Restful框架也不少,比如:Restlet、Jersey、RESTEasy、CXF。相关文章请查询:各JAX-RS实现
说了这么多,那有没有例子呢?大家可以参考:Spring REST实践、百度云推设计、环信api设计
参考:http://www.cnblogs.com/coderland/p/5903034.html
http://www.jianshu.com/p/c117d32aded4
3.restful api 接口规范 : https://blog.csdn.net/u010622769/article/details/54341363
状态码有实际意义,可以认为是前端跟后端的一个通用协议 ,我返回一个状态码,前端就找到这个状态码是什么意思,而不需要给出错误原因等等,要特别注意!!!
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
- 204 NO CONTENT - [DELETE]:用户删除数据成功。
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
- 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
- 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
- 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
- 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。