【小家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”相关。


相关文章
|
2天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
16 0
|
1天前
|
Java API
Java 8新特性:Lambda表达式与Stream API的深度解析
【7月更文挑战第61天】本文将深入探讨Java 8中的两个重要特性:Lambda表达式和Stream API。我们将首先介绍Lambda表达式的基本概念和语法,然后详细解析Stream API的使用和优势。最后,我们将通过实例代码演示如何结合使用Lambda表达式和Stream API,以提高Java编程的效率和可读性。
|
3天前
|
NoSQL JavaScript API
深入浅出:从零构建RESTful API
本文将带你踏上一场后端开发的奇幻旅程,我们将一起揭开RESTful API的神秘面纱。无论你是初学者还是有一定经验的开发者,这篇文章都会为你提供宝贵的知识。我们将从基础概念出发,逐步深入到实战操作,最终实现一个功能完备的RESTful API。在这个过程中,你将学会如何设计API、处理数据和响应请求。准备好了吗?让我们开始吧!
|
2天前
|
缓存 API 网络架构
构建高效RESTful API的实用指南
【8月更文挑战第29天】在数字时代的浪潮中,API(应用程序编程接口)已成为连接不同软件和服务的桥梁。本文将引导你理解RESTful API的核心概念,探索设计原则,并通过实际代码示例,展示如何实现一个高效的RESTful API。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启示。
|
2天前
|
存储 设计模式 API
深入浅出后端开发:从零到一构建RESTful API
【8月更文挑战第29天】本文旨在引导读者理解后端开发的精髓,并通过实际代码示例,展示如何从无到有构建一个RESTful API。文章首先解释后端开发的基本概念,然后逐步深入到API设计的原则和最佳实践,最后通过一个具体的代码示例,让读者能够动手实践,体验后端开发的乐趣。
|
7天前
|
API 开发者 网络架构
探索RESTful API设计的艺术与实践
【8月更文挑战第24天】在数字化时代的浪潮中,RESTful API已成为现代Web应用的脊梁。本文将带你深入理解RESTful原则,并通过实际代码示例,展示如何将这些原则应用于设计高效、可维护的API接口。我们将从基础理论出发,逐步过渡到高级技巧,让你在API设计的旅程上一帆风顺。
|
7天前
|
JavaScript 前端开发 中间件
深入浅出Node.js:从零开始构建RESTful API
【8月更文挑战第24天】在数字化时代的浪潮中,后端开发作为支撑现代网络服务的骨架,扮演着至关重要的角色。本文将通过Node.js这一高效灵活的JavaScript运行环境,引领你步入后端开发的神秘世界。我们将从基础概念出发,逐步深入到实战操作,最终构建一个功能完备的RESTful API。无论你是编程新手还是前端开发者,这篇文章都将为你揭示后端开发的奥秘,让你轻松掌握使用Node.js进行API开发的实用技巧。
|
13天前
|
缓存 Java API
从零到一:构建一个高效的 RESTful API 服务
本文将详细介绍如何从头开始设计和实现一个高效的 RESTful API 服务。我们将探讨 API 设计的最佳实践、选择合适的技术栈、实现常见功能(如认证、数据验证、错误处理)以及优化性能的策略。通过实例代码和实际应用场景的分析,读者将能够掌握构建高效且易于维护的 API 服务的关键步骤和技巧。
|
15天前
|
Java API 开发者
|
19天前
|
Java API 数据库
【神操作!】Spring Boot打造RESTful API:从零到英雄,只需这几步,让你的Web应用瞬间飞起来!
【8月更文挑战第12天】构建RESTful API是现代Web开发的关键技术之一。Spring Boot因其实现简便且功能强大而深受开发者喜爱。本文以在线图书管理系统为例,展示了如何利用Spring Boot快速构建RESTful API。从项目初始化、实体定义到业务逻辑处理和服务接口实现,一步步引导读者完成API的搭建。通过集成JPA进行数据库操作,以及使用控制器类暴露HTTP端点,最终实现了书籍信息的增删查改功能。此过程不仅高效直观,而且易于维护和扩展。
30 1
下一篇
云函数