2022年4月

面向资源的架构roa

Resource- oriented architecture

四个属性

可寻址性addressability

在URI里面有query或者本身(像本博客的文章链接)

无状态性 statelessness

无法返回,可能违反了无状态性

连通性 connectedness

可以让应用进入其他状态,甚至进入其他应用的其他状态

统一接口 uniform interface

Get, post, put, delete, head, options

head

Head比get就是缺少返回的实体主体.
可以检查资源是否存在而不必下载实体主体

options

看可以对一个资源作哪些操作

post

在rest式设计中post通常被用于创建 从属资源(subordinate resources),即从属于父资源而存在的资源,例如本博客程序作为一个资源,而文章就是从属资源。
因此我可以向父资源(博客)发送post请求,这种用法被称为post(a) 表示append 添加。

重载的post(p) p:process

在post里面放一堆东西,可能并不是真的在post而是在处理其他的事情,比如delete

安全性和幂等性(idempotence)

安全性

如果能按照原来的用意暴露统一接口,那么用户在使用get,不用害怕修改掉服务器的资源。
(有时的副作用)有的时候客户端使用get请求,服务器会计数+1(记访客数,或者记录日志)等影响不会很大。且客户端不知道会产生此副作用

幂等性(idempotence)

一个操作无论执行多少次,结果总是一样的。
例如任何数乘以0都等于0。
一个资源put以后还是一个资源。
一个资源delete后它就不存在了,无论删除多少次,它都不存在。
幂等性对实践提出的要求是:客户端可以通过put把数值设置为4,0,6。但是不允许直接对资源+1,例如0两次put后就成了2。该操作不满足幂等性。

为什么

如果在一个非可靠网络上,收到了两次put,即使前一个已经被处理了,再处理一次也不会有任何副作用。
post不是安全的,也不是幂等的。可以参考贴吧回复的时候可能会抽风,回复了两次。
误用:请不要通过get暴露非安全操作。
Google在2005年发布了一个Web accelerator,可以 prefetch 页面的链接。。。然后可想而知,如果有一个delete操作使用的是get,用户在打开自己的页面时,不知情的状况下就会删除自己的数据。

Web性能权威指南读书笔记

HTTP0.9(非官方名)

请求只有一行,返回超文本响应
91年

HTTP1.0

响应response不限于超文本
请求可以有多行首部字段构成
每次请求都会关闭
多了响应状态(200这样的)
96年左右

HTTP1.1

持久连接,分块编码传输,字节范围请求,增强的缓存机制,传输编码
97,99年

HTTP2

更快的速度,书上没有介绍太多,只有目标是低延迟高吞吐
现在已经有了,很不错。

(前端架构设计 Micah godbolt 读书笔记)

  1. 代码

模块化内容,更推荐在可能的情况下复用小的组件。
保持代码整洁。约定好使用的规范。
CSS

  • oocss object oriented css
    例如bootstrap就是一个很好的例子
  • smacss scalable and modular architecture for css
    与oocss的区别是有状态is-active这样的类,而且有主题(一个可选的视觉外观层,可以更换不同的主题。)
  • BEM block element modifier命名规则

2.测试
保证兼容性,保证代码良好

3.流程
现在使用类似Jenkins这样的工具可以快速部署服务
当然一些简单的应用,还可以利用一些例如腾讯云webify,国外的一些直接应用,减少运维成本,快速上线。

当然在使用第三方服务时,要考虑是否有成本去自己管理,我本人也更推荐掌握自主权。

4.详细的文档
抽时间编写良好的文档,利于对项目的维护,和团队成员对项目的理解。

在引用js css资源时,使用CDN加载是当下很火的使用方式。

使用CDN,不仅能减少对服务器资源的占用,还可以让用户更快地加载完需要加载完的文件,完成页面的渲染等。

而我们作为前端要了解的一个小知识就是用户在访问资源时,首先访问的是CDN的域名,而用户要找到域名就要通过DNS,用户在查找时跳的次数多了,则会一定程度拖慢加载速度。