如无必要 勿增实体 是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如无必要 勿增实体 是啥意思相关的知识,希望对你有一定的参考价值。

如无必要 勿增实体
是什么意思

奥卡姆剃刀定律(Occam's Razor, Ockham'sRazor)又称“奥康的剃刀”,是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。这个原理称为“如无必要,勿增实体”,即“简单有效原理”。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情。”

这个原理称为“如无必要,勿增实体” (Entities should not be multiplied unnecessarily)。有时为了显示其权威性,人们也使用它原始的拉丁文形式:
Numquam ponenda est pluralitas sine necessitate.(避重趋轻)
Pluralitas non est ponenda sine necessitate.(避繁逐简)
Frustra fit per plura quod potest fieri per pauciora.(以简御繁)
Entia non sunt multiplicanda praeter necessitatem.(避虚就实)

摘自百度百科
参考技术A 奥卡姆剃刀,又称“奥康的剃刀”,源自奥卡姆(William Ockham,约1285年至1349年)在《箴言书注》2卷15题所说“切勿浪费较多东西去做用较少的东西同样可以做好的事情。”后人通常转述为”如无必要,勿增实体。“追问

浪费东西去做什么

追答

该定律反应的观点就是,在解释同一件事实时,如果存在两个理论,一个人应该选择假定实体最少数量的那个理论。为什么一个人应该选择最简单的理论呢?这不是一个可以简单的从哲学上进行辩护的判断,然而它却强调了一种强烈的直觉上的申述。用较多东西去做用较少的东西同样可以做好的事情就是浪费。”换句话说,当存在更简洁的方式时,它总是更好的。

本回答被提问者采纳
参考技术B 知足常乐 参考技术C 最简单的反而是最接近真相的

前后端分离:RESTful API和HTTP动词


这是张富涛的第12篇原创

前后端分离:RESTful API和HTTP动词

1. 前言

现在很多公司都使用“前后端分离”进行开发,“后端工程师”为“前端工程师”提供API接口,这么做的好处是可以“确认职责”和“提高开发效率”,同时还有一套接口设计的比较好后,还可以让移动端调用。但前后端分离本质上是使用“增加人数、明确分工”来“提高产能”的,软件研发行业一般有一个比较基本的理念是:如无必要,勿增实体 ,但如果使用这种方案,一般必须要制定一套机制,或者说是一套约定,保证“实体”(前后端工程师)之间的沟通顺畅,让其更有条理进行前后端分离开发。

本系列讲讲我们在开发过程中进行的,可行的前后端分离探索,主要包含以下命题,大概3~4篇内容:

  • RESTful API和HTTP动词
  • Swagger
  • JWT(JSON Web Token)

2. 概述

RESTful API就是目前比较成熟的一套互联网应用程序的API设计理论,今天我们就来简单了解一下RESTful API,在下面的介绍中,我们可以假设自己即将设计一套为移动端提供的接口,来寻找解决方案,这样会更便于理解RESTful API。

3. 域名

应该尽量将API部署在专用域名之下:

https://api.example.com/

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下:

https://example.com/api/

4. API版本

https://api.example.com/v1/

值得一提的是Github就采用这种做法。

5. Action地址设计

https://api.example.com/v1/users

而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。

6. HTTP动词

在RESTful框架中,用不同的HTTP动词标识对一种资源的操作类型。

常用的HTTP动词有下面五个(括号里是对应的SQL命令):

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
  • DELETE(DELETE):从服务器删除资源。

还有两个不常用的HTTP动词:

  • HEAD:获取资源的元数据。
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

下面是关于设计的一些例子:

  • GET     /users:列出所有用户
  • POST  /users:新建一个用户
  • GET     /users/id:获取某个指定用户的信息
  • PUT     /users/id:更新某个指定用户的信息(提供该用户的全部信息)
  • PATCH /users/id:更新某个指定用户的信息(提供该用户的部分信息)
  • DELETE /users/id:删除某个用户
  • GET         /users/id/orders:列出某个指定用户的所有订单
  • DELETE /users/id/orders/id:删除某个指定用户的指定订单

7. 对于不同HTTP动词的返回值

  • GET(SELECT):一个对象或多个对象的集合(数组)
  • POST(CREATE):返回创建的对象信息
  • PUT(UPDATE):返回修改后的对象信息
  • PATCH(UPDATE):返回修改后的对象信息
  • DELETE(DELETE):返回空

8. 返回状态码

在RESTful设计中,接口返回的信息中需要返回状态码及提示信息,如在“连接成功要返回200”,“获取不到访问页面返回404”等状态码,常用的状态码如下(除了这些我们也可以自己设计状态码,但是需要跟前端做好约定):

(方括号中是该状态码对应的HTTP动词):

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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

9. 安全性

为了保证我们设计的接口的安全性,保证应用与API服务器之间的安全通信,防止数据篡改中间人攻击等恶意攻击,建议使用HTTPS协议,同时不建议一些隐私权限的API直接将参数进行明文传参,而改成传递token和参数加密等形式:例如:有个修改昵称的API,参数中“修改谁的昵称(uid)”不应该直接传递,而应该改为token形式,同时增加调用权限校验。

10. 完美结合RESTful的文档生成工具

在做RESTful形式开发时,最好结合文档生成工具进行开发,这样能够实时给前端更新文档的同时,也方便前端进行测试。

下面这张图为Swagger生成的接口文档和测试接口:前后端分离:RESTful API和HTTP动词

注意:经过实践结果,swagger仅是生成API文档(并可供web直接访问)的工具,对代码有一定侵入性,但侵入程度不大。

11. 一个可供参考的RESTful返回值结构

之前我在开发前后端分离时自己总结出了一个返回值的结构,在项目开发的过程中我们的开发体验较不错,在这里分享给大家(删除了get、set方法):

长按下图二维码关注:

以上是关于如无必要 勿增实体 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

对抗软件系统复杂性①:如无必要,勿增实体

对抗软件系统复杂性①:如无必要,勿增实体

什么是“奥卡姆剃刀原理”?

奥卡姆剃刀-简单有效原理的思维模型

前后端分离:RESTful API和HTTP动词

元宇宙会成为 IPv6 的拐点吗?