首页
学习
活动
专区
圈层
工具
发布

RESTful API接口设计规范与最佳实践

当一个查询的结果为空的时候,为什么有的接口设计会返回异常(HTTP状态码404或其他),有的则是会返回请求成功(HTTPS状态码200),但是返回结果是空数组或者null等表示结果为空的标识?...我的建议是如果你能做主,而且觉得有必要,就严格遵循,反之,领导说就啥吧。 Part3为什么接口是否请求成功,HTTP状态码永远只会是200?...问题: 当一个查询的结果为空的时候,为什么有的接口设计会返回异常(HTTP状态码404或其他),有的则是会返回请求成功(HTTPS状态码200),但是返回结果是空数组或者null等表示结果为空的标识?...解析:这个问题情况有点特殊,理论上来说,当我们查询了资源然后结果是不存在的时候,这个时候用404的HTTP状态码来标识本次请求的响应状态是一点问题都没有的,也是非常规范的做法。...,那么我返回的结果自然是空的,并不能视为一个异常,这时候返回一个200的HTTP状态码,然后在响应结果里面明确结果是空的才是正确的做法。

1.9K10

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH 和 Log

但是DELETE是具有幂等性的,这个你可能会有疑问,我执行多次DELETE后返回的状态码不一样为什么还具有幂等性。...(由于对象本身只有一个属性,我就传递一个无属性对象吧- -!): ? 操作结果依然是没问题的,使用GET反查一下: ?...PUT请求会发送到现有资源的URI上,如果资源不存在就返回404。 而POST用于创建资源,所以肯定不知道该资源的URI(是指GET的URI)。...HTTP方法适用总结 常用的5中HTTP方法都介绍了,下面总结一下: GET(获取资源): GET api/countries,返回200,集合数据;找不到数据返回 404。...body里面带回去 为EFCore的Model添加约束 我之前还没有为EFCore的model添加约束,这里我添加上(由于我使用的是内存数据库,所以下面的约束是不起作用的,这些约束只有在关系型数据库才起作用

2.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    通俗易懂的生产环境Web应用架构介绍

    这些年我学到的经验之一是,对于开发Web应用程序,个别工程师倾向于非常深入地了解他们感兴趣的东西,对于不感兴趣但必要的组件缺只学习皮毛,这其实是非常“危险”。...我禁用了Javascript,为什么网站作者会觉得我会取读取你的2 MB Javascript文件 … 你的主页需要4秒钟才能加载。...我居住在澳大利亚,Traceroute显示服务器托管在德克萨斯州的某个地方。另外,为什么你的网页需要2 MB的Javascript?...在这里插入图片描述 这时候你已经解决了当前的问题,这之后,你可以随时访问服务器并查看日志。 但你慢慢发现,你的SSH连接非常迟钝。...你注意到数据库服务器上也有类似的可疑日志,现在你很想问自己为什么将它们的端口暴露在了外网上,是时候区分公共和私人子网了。 ? 在这里插入图片描述 OK,你又开始检查你的日志。

    1.3K20

    通俗易懂的生产环境Web应用架构介绍

    这些年我学到的经验之一是,对于开发Web应用程序,个别工程师倾向于非常深入地了解他们感兴趣的东西,对于不感兴趣但必要的组件缺只学习皮毛,这其实是非常“危险”。...我禁用了Javascript,为什么网站作者会觉得我会取读取你的2 MB Javascript文件 … 你的主页需要4秒钟才能加载。...我居住在澳大利亚,Traceroute显示服务器托管在德克萨斯州的某个地方。另外,为什么你的网页需要2 MB的Javascript?...还将静态文件推送到AWS S3,这样做是为了让CloudFront CDN能够起作用,来减少澳大利亚用户的访问时间。 ? 这时候你已经解决了当前的问题,这之后,你可以随时访问服务器并查看日志。...你注意到数据库服务器上也有类似的可疑日志,现在你很想问自己为什么将它们的端口暴露在了外网上,是时候区分公共和私人子网了。 ? OK,你又开始检查你的日志。

    1.2K30

    python requests模块详解

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?...另外,HTTP请求还有很多类型,比如POST,PUT,DELETE,HEAD,OPTIONS。也都可以用同样的方式 因为目前我还没用到这些,所以没有深入研究。 ...所以就替代了urllib2的urllib2.urlopen(url).read()功能。(基本上是我用的最多的一个功能。)...但第三个就有点奇怪了,那个是百度搜索结果中的302跳转地址,但状态码显示是200,接下来我用了一招让他原形毕露: 只要加上一个参数allow_redirects,禁止了跳转,就直接出现跳转的状态码了,...3、大多数用的IDLE格式,累死了,下次直接用编辑器格式,这样更符合我的习惯。  4、还是那句话,有问题留言或email。

    2.6K10

    GitLab 是如何用 Headless Chrome 测试的

    Chrome之前是有可能在CI/CD的环境下运行虚拟帧缓冲器(https://gist.github.com/addyosmani/5336747)来模拟Headless Chrome的,但需要大量的内存...一个原生的无头浏览器会改变测试的风云变幻格局。(我没头,不怕砍头!)开发者竟然能在现代浏览器的无头环境下进行集成测试!...麻烦的是,你不能改变路径(path)参数(否则的话永远不起作用),所以最好在根路径设置cookies。 在你访问你的页面前,Chrome的url一般是显示about:blank;的。...: page.driver.manage.get_log(:browser) 这样比Poltergeist笨重得多,但这是我们目前最好的方案了。...现在,当一个 CI/CD job 失败的时候所有生成的Capybara截图,看起来是与你的浏览器是完全一样的,而不是像上面那张破碎的PhantomJS截图。

    4.4K80

    Fetch API速查表:9个最常见的API请求

    中我对比了 Axios,在小型项目的情况下,使用 Fetch API 只需要几个简单的 API 调用,Fet 是一个很不错的解决方案。...在本文中,我将列出 9 个最常见的 Fetch API 请求,在你忘记 API 的时候可以翻出来查看。​ 我相信你已经用过它们很多次了。...但是,如果能避免在旧项目中寻找半年前使用过的特定请求的语法,岂不更好? 为什么要使用 Fetch API?...这就是为什么我总是使用 .then() 和回调函数来处理响应的原因: fetch(...).then(response => { // process the response } 但是,如果你处于异步函数中...我是否错过了什么,一个你每天都在使用的请求?或者是其他你正在苦恼的事情?请在评论区上告诉我。

    1.8K20

    HTTP 304状态码的详细讲解

    大家好,又见面了,我是你们的朋友全栈君。 HTTP 304状态码的详细讲解 304状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。...避免条件请求 通常来说,缓存是个好东西.如果你想提高自己网站的访问速度,缓存是必须要考虑的.可是在调试的时候,有时候需要阻止缓存,这样才能确保你所访问到的资源是最新的....此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引...307(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。

    16K21

    【Wordpress】5.2+ 版本文章发布、更新失败

    大胆尝试: 我们不妨打开控制台看一下,在更新文章或者发布文章的时候都发生了什么,如图,在保存文章的时候,发了一个 wp-json/wp/v2/posts/ 的请求,但是返回结果是 200(有的时候可能返回结果是...404),这样看感觉没啥问题。...就大胆猜测可能是一些没有问题并没有作为异常抛出来。 ? 那我们不妨就百度一下,wp-json/wp/v2/posts/ 为什么不起作用?...虽然,并没有直接解决的方案,但是我们不难看出,搜索结果中绝大多数都提到了 rest api 的关键词。...然后我们再去修改文章,这有时候不出意外就可以成功保存了~ 为什么这个 WPJAM 会自带这个功能呢?WordPress 技巧:屏蔽 REST API ?

    1.4K20

    HTML5 - 应用程序缓存(Application Cache)

    为什么要使用Application Cache技术? 在HTML5之前,我们需要接入网络才能访问,这毫无疑问是网站多次请求服务器,造成速度变慢,对于PC用户,网络相对比较稳定,载入速度也不会差太多。...我用一段话来赘述下为什么要使用Application Cache技术: 当页面有些元素它们是不变的,你可以使用Application Cache技术离线缓存掉,每次访问这些缓存掉的元素就不需要再请求服务器了...总结:NETWORD列出的资源是需要每次请求的动态资源文件(不缓存的文件) 三、FALLBACK FALLBACK: /index/ /404.html FALLBACK 小节规定如果无法建立因特网连接...因为启用的web离线缓存机制,所以每次ajax加载数据时是从本地缓存文件中读取的,用的是ajax的get模式,因为get模式缓存,所以不会重新向服务器请求数据,导致数据加载失败。...cache.status属性返回当前离线应用状态 UNCACHED ( 数值 0) :未启用离线应用 IDLE ( 数值 1) :已开启离线应用,但本地缓存的资源是最新的,并且未标记为废弃资源 CHECKING

    2.1K10

    一种新型滥用缓存密钥规范化的缓存投毒技术

    这个漏洞是由Fastify的Accept-Version Header所导致的,它将允许客户端返回资源的版本描述信息,我可以使用下列方法来利用该功能: GET /assets/login.js?...研究过程中,我发现大多数技术都讨论了非缓存键输入如何导致DoS,但它们忽略了缓存键输入,比如说主机Header或路径等等。因此,我能够想出两个新的攻击方式,并成功复现一次之前的漏洞。...就我目前所知,路径中的最后三个数字是用来告诉服务器应该返回映射的哪一部分范围。我研究了半天,但啥也没获取到。...起初,我认为1.0.5只是一个版本号,所以我没有太过关注,但令我惊讶的是,当我尝试1.0.4时,竟然出现了缓存命中的情况。...,并将请求重定向到服务器上不存在的/map/4/77/16.png,从而导致404错误。

    77610

    一种新的滥用缓存密钥规范化的缓存投毒技术分享

    这个漏洞是由Fastify的Accept-Version Header所导致的,它将允许客户端返回资源的版本描述信息,我可以使用下列方法来利用该功能: GET /assets/login.js?...研究过程中,我发现大多数技术都讨论了非缓存键输入如何导致DoS,但它们忽略了缓存键输入,比如说主机Header或路径等等。因此,我能够想出两个新的攻击方式,并成功复现一次之前的漏洞。...就我目前所知,路径中的最后三个数字是用来告诉服务器应该返回映射的哪一部分范围。我研究了半天,但啥也没获取到。...起初,我认为1.0.5只是一个版本号,所以我没有太过关注,但令我惊讶的是,当我尝试1.0.4时,竟然出现了缓存命中的情况。...,并将请求重定向到服务器上不存在的/map/4/77/16.png,从而导致404错误。

    88110

    让你的Django应用变DRY的几个最佳实践

    DRY是Don't-Repeat-Yourself的缩写,是一种代码编写的原则,即不要重复自己的工作。我个人有些代码洁癖,凡是发现我需要复制粘贴代码的地方,就想着能怎样去除重复的工作。...注意:在使用到用户模型的时候,要使用django.contrib.auth.get_user_model()而不是导入具体的model类,这样可以方便用AUTH_USER_MODEL配置去改变用户模型。...,是对RESTful请求的身份验证,通过分析请求带的身份信息判断来源方的身份,一般有以下几种方式: 会话鉴权(登录态) BasicAuth鉴权 Token鉴权 这些类都包含在rest_framework.authentication...二、自定义响应体 很多时候(如前端框架、开发SDK)对响应体的格式是有要求的,我看到大多数的实现只是用一个格式化的类去填充响应信息,但这种方法有两个缺点: 每次需要人为构造响应 无法适用于DRF的ModelViewSet...只是有时候为了抽出这些代码,又产生了很多额外的代码,这是需要取舍的。相信本文中提到的三个大方向,能对你有所启发。

    2.2K50

    基于云开发开发 Web 应用(五):关于七牛的一些问题

    关于七牛 在第一篇文章中,我提到,项目的自动部署是放在 now.sh 上,以方便预览。但出于用户体验和速度的考虑,我们选择了国内的七牛云作为页面的承载。...但在部署过程中,屡次报错,不知道为什么。在开启了 DEBUG 信息后发现,竟然是 Bucket 不存在(点我查看 CI 的构建信息)。...在七牛中进行权限分配的时候,会要求你为 Bucket 设定一个别名,而且名字和已有的名字必须是不同的,这导致我看到的 Bucket 的名和老王创建的 Bucket 名是不相同的。...[rojug.jpg] 由于我填写的 Bucket 是我自己看到的,而不是老王那边真正的 Bucket 名称,导致在上传的时候,无法找到 Bucket。...你需要做的,就是将 index.html 复制一份,并重命名为 errno-404,并和其他文件一同上传,这样用户请求一些不存在的文件时,会自动将请求转发给 errno-404, 又因为这个文件的内容是

    90730

    Fetch还是Axios——哪个更适合HTTP请求?

    GET 请求的语法。....fetch() 方法的第二个参数是选项,它是可选的。如果我们不传递 options,请求总是 GET,它从给定的 URL 下载内容。...JSON 如前所述,当我们在使用 .fetch() 方法的时候,需要对响应数据使用某种方法,当我们在发送带有请求的 body 时,需要对数据进行字符串化。...为了方便和正确的错误处理,对于你的项目来说,axios 绝对会是一个更好的解决方案,但如果你正在构建一个只有一两个请求的小项目,使用 .fetch() 是可以的,但你需要记住正确处理错误。...在 axios 的情况下,HTTP 拦截是这个库的关键功能之一,这就是为什么我们不需要创建额外的代码来使用它。让我们看一下代码示例,看看我们能做到多么容易。

    6.8K20

    HTTP 返回状态值详解

    Http状态码一览表     所谓的404页就是服务器404重定向状态返回页面。数字404指的是404号状态码。 一般常用到的有200号状态码和404号状态码。...但处理未完成 203——返回信息不确定或不完整 204——请求收到,但返回信息为空 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件 206——服务器已经完成了部分用户的GET请求 3xx...此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引...此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引...该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。

    5K30
    领券