【小家java】 Restful风格的API设计中,怎么实现批量删除?

简介: 【小家java】 Restful风格的API设计中,怎么实现批量删除?

相关阅读

【小家java】java5新特性(简述十大新特性) 重要一跃

【小家java】java6新特性(简述十大新特性) 鸡肋升级

【小家java】java7新特性(简述八大新特性) 不温不火

【小家java】java8新特性(简述十大新特性) 饱受赞誉

【小家java】java9新特性(简述十大新特性) 褒贬不一

【小家java】java10新特性(简述十大新特性) 小步迭代

【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本


每篇一句

面试高大上,面试造飞机,工作拧螺丝


因此不能以为自己工作觉得还OK,就觉得自己技术还不错了


如题,指的是在restful风格的url设计中,怎么实现批量删除呢?


这里指的删除是真删除,不是逻辑删除。如果是逻辑删除,其实就是update,使用put方法即可


如果是需要删除一个条目,可以直接将需要删除的条目的id放进url里面,比如http://example.com/posts/2016,但是如果需要再一次请求里面删除多个条目,应该如何设计比较合理呢?我现在想到的是以下两种方法:


1.用逗号分隔放进url里面:http://example.com/posts/2016,2017;

2.将需要删除的一系列id放进请求体里面,但是似乎没有这样的标准(DELETE请求)。


先说说方法1,如果删除的数据非常多,比如超过1000个id,那很可能就超过URL的长度限制了。


Url长度限制:

IE7.0 :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。

firefox 3.0.3 :url最大长度7764个字符,超过最大长度后无法提交。

Google Chrome 2.0.168 :url最大长度7713个字符,超过最大长度后无法提交


从上面可以看出,这是有风险的可能提交不了的。但是话说回来,你是什么需求,需要一次性删除1000条记录,这是多么危险的操作,怎么可能通过API暴露出来呢?所以综合考虑,我个人认为,使用url的方式传递删除的值,是没有任何问题的。毕竟我们99%的情况,都是非常少量多额删除操作。


再说说方法2,其实我是不太建议的。因为我们删除操作,肯定使用DELETE请求,但是奈何我们并不建议在DELETE请求里放body体,原因在于:根据RFC标准文档,DELETE请求的body在语义上没有任何意义。事实上一些网关、代理、防火墙在收到DELETE请求后,会把请求的body直接剥离掉。


所以,万一你要放在body体里传参,请使用POST请求


这里介绍一种比较优雅,但是比较麻烦点的方法:

分成2步完成,第一步发送POST请求,集合所有要删除的IDs然后返回一个header,然后在利用这个header调用DELETE请求。具体步骤如下:

发送POST请求,集中所有的IDs (可以存到Redis或者普通数据库)

http://example.com/posts/deletes


成功后可以返回一个唯一的头文件:


HTTP/1.1 201 created, and a Location header to:

http://example.com/posts/deletes/KJHJS675


然后可以利用Ajax直接发送DELETE请求:

DELETE http://example.com/posts/deletes/KJHJS675


这样就可以在不暴露IDs的情况下更加安全的删除相关条目。

最后如果要获得一个资源,一定要用GET方法么?

在一些文章中,看到获取资源的时候,一般用GET方法。我的问题是,我要获取的资源是一个账户的信息,需要实用token,我一般把token放在POST请求里面,当然也可以将token放在连接中使用GET。


其实,restful只是一种理想的情。你是否完全遵循Restful设计原则了 如果完全遵循的话, 获取账户信息应当是GET请求, 但是token通常是会放在header中, 不在url中体现

针对我们的token这个事情,在我项目中会使用post请求根据用户信息获取一个token,然后拿着token用get方法请求资源。**另外,我也会将token放到http请求头中。**以上是个人工作经验,希望对各位有帮助

最后

restful风格的url我们可以尽量去遵守,因为它对运维或者监控都非常友好。但是不要一根经,它只是理想情况,有的时候并不满足我们的需求,我们可以变通的看问题。


简明的一幅图,rest接口的命名规范:


image.png


为什么会推荐用 -,而不是 _?

-叫做分词符,顾名思义用作分开不同词的。这个最佳实践来自于针对Google为首的SEO(搜索引擎优化)需要,Google搜索引擎会把url中出现的-当做空格对待,这样url “/it-is-crazy” 会被搜索引擎识别为与“it",“is”,“crazy"关键词或者他们的组合关键字相关。

当用户搜索”it”,“crazy”, "it is crazy"时,很容易检索到这个url,排名靠前。


_ 这个符号如果出现在url中,会自动被Google忽略,“/it_is_crazy”被识别为与关键词 “itIsCrazy”相关。


相关文章
|
10天前
|
缓存 JavaScript 前端开发
深入浅出:使用Node.js构建RESTful API
【9月更文挑战第3天】在数字化浪潮中,后端开发如同搭建一座连接用户与数据的桥梁。本文将带领读者从零开始,一步步用Node.js搭建一个功能完备的RESTful API。我们将探索如何设计API的结构、处理HTTP请求以及实现数据的CRUD操作,最终通过一个简单的实例,展示如何在真实世界中应用这些知识。无论你是初学者还是有一定经验的开发者,这篇文章都会为你揭示后端开发的奥秘,让你轻松入门并掌握这一技能。
29 3
|
2天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
1天前
|
JSON API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
11 6
|
4天前
|
设计模式 测试技术 API
Micronaut魔法书:揭秘构建超光速RESTful API的绝密技术!
【9月更文挑战第10天】在现代Web开发中,构建RESTful API至关重要。Micronaut作为一款轻量级框架,能够快速创建高效API。本文探讨使用Micronaut构建RESTful API的最佳设计模式与实践,涵盖注解(如`@Controller`、`@Get`)、代码组织、REST原则、数据验证及测试等方面,帮助开发者构建结构清晰、可维护性强的API服务。示例代码展示了如何使用Micronaut实现用户管理API,强调了良好设计模式的重要性。
20 3
|
8天前
|
XML JSON 缓存
探索后端开发中的RESTful API设计原则
【9月更文挑战第5天】在数字化时代的浪潮中,后端开发扮演着支撑整个互联网世界运行的基石角色。而作为连接前端与后端桥梁的RESTful API,其设计质量直接影响到应用的性能和用户体验。本文将深入探讨RESTful API的设计原则,通过浅显易懂的语言和实际代码示例,引导读者理解如何构建高效、易于维护的API。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考。
|
9天前
|
前端开发 API 数据安全/隐私保护
打造高效后端API:RESTful设计原则与实践
【9月更文挑战第4天】在数字化时代的浪潮中,后端API作为连接数据和前端的桥梁,其设计质量直接影响着应用的性能和扩展性。本文将深入探讨RESTful API的设计哲学、核心原则以及如何在实际开发中应用这些原则来构建一个高效、易于维护的后端系统。我们将通过代码示例,揭示如何将理论转化为实践,从而为开发者提供一条清晰的道路,去创造那些能够在不断变化的技术环境中茁壮成长的API。
|
8天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
32 2
|
11天前
|
JSON JavaScript 中间件
深入浅出Node.js: 从零开始构建RESTful API
【8月更文挑战第34天】 在数字时代的浪潮中,掌握如何构建高效、可靠的后端服务是每一位开发者的必备技能。本文将通过浅显易懂的语言和实际代码示例,带领初学者走进Node.js的世界,一步步搭建起自己的RESTful API。无论你是编程新手,还是想扩展技术栈的老手,这篇文章都将是你的良师益友。让我们一起探索Node.js的魅力,开启后端开发之旅!
|
13天前
|
缓存 JavaScript 前端开发
构建RESTful API的最佳实践
【8月更文挑战第31天】 本文将带你深入了解如何设计和实现一个高效、可维护的RESTful API。我们将探讨API设计的关键原则,包括资源命名、请求方法的使用以及状态码的正确应用。文章还将展示如何使用Node.js和Express框架创建一个简单的API,并解释如何确保API的安全性和性能优化。无论你是新手还是有经验的开发者,这篇文章都将提供实用的指导和代码示例,帮助你构建更好的后端服务。
|
14天前
|
XML JSON API
构建高效后端API:RESTful设计原则与实践
【8月更文挑战第31天】在数字化浪潮中,后端API成为连接世界的桥梁。本文将引导你探索RESTful API的设计哲学,通过实例展示如何构建一个高效、易于维护且具有扩展性的后端服务。从资源定义到HTTP方法的应用,再到状态码的精准使用,我们将一步步揭开高效后端API的秘密。