我必须创建一个中间件API,该功能可以检查数据库中是否存在密钥。如果密钥存在,则应该简单地获取它(GET方法)。如果不是,则API应该在数据库中创建密钥及其值,然后返回该密钥(POST方法)。因此,由于此API中有2种根本不同的方法组合在一起,这样做正确吗?设计此类API的最佳方法应该是什么?
答案 0 :(得分:2)
不要将它们组合在一起。
如果您的记录不存在,则从GET
方法返回零结果。然后,在客户端中,如果收到零结果,则将所需信息POST
发送到另一个API端点。
将这两个想法结合在一起将创建一个难以理解的系统。您的系统应该是确定性的,即您始终可以在每次调用之前知道每次调用的结果。
答案 1 :(得分:1)
查看API的一种方法是忘记基础数据库,但考虑一下API客户端如何使用它。
如果API客户端执行GET请求,则会发生两件事:
客户端可能实际上并不关心是否发生1或2。从客户的角度来看,资源似乎总是存在的(即使只是从技术上来说就是创建的)。
只要没有必须与POST请求一起发送的额外信息,在两种情况下都可以使用GET请求。
答案 2 :(得分:0)
我不知道您的情况,通常最好将您的获取和发布分开。但是,如果您的客户认为需要创建一条记录然后发布数据,则我看不到返回资源和该资源已存在的409的问题。这是一个类似的问题HTTP response code for POST when resource already exists
然后,客户端可以根据您的需要不同地处理409或与处理200相同。