REST API POST端点,该端点不';无法持久化创建的资源

REST API POST端点,该端点不';无法持久化创建的资源,rest,django-rest-framework,api-design,restful-url,Rest,Django Rest Framework,Api Design,Restful Url,我有一个RESTAPI,我想在其中添加一个运行算法并返回结果的端点。假设算法足够快,可以同步完成。然而,结果可能很大 选项A 我将算法的结果视为“资源”。我可以实现以下功能 POST/api/my result 这将通过运行算法创建一个新结果。算法的输入在请求主体中。响应包含结果的id或其他可识别的表示形式 GET/api/my result/?view=table 这允许客户端获得结果的表表示形式。同样,也可能有其他视图、过滤器等,它们可以以相同的方式实现 但是,这需要我将结果持久化到数据库中

我有一个RESTAPI,我想在其中添加一个运行算法并返回结果的端点。假设算法足够快,可以同步完成。然而,结果可能很大

选项A

我将算法的结果视为“资源”。我可以实现以下功能

POST/api/my result

这将通过运行算法创建一个新结果。算法的输入在请求主体中。响应包含结果的id或其他可识别的表示形式

GET/api/my result/?view=table

这允许客户端获得结果的表表示形式。同样,也可能有其他视图、过滤器等,它们可以以相同的方式实现

但是,这需要我将结果持久化到数据库中。有两个问题:(a)结果可能很大,(b)在决定“保留”其中一个结果之前,客户机通常使用不同的输入运行算法数次,因此理想情况下,我只希望将最终结果存储在数据库中

选项B

POST/api/my算法/ 这将在请求正文中接受算法的参数,并在响应正文中返回结果

POST/api/my结果表视图 这将接受请求主体中的结果,并返回将结果表示转换为表视图的响应。它之所以不是GET/api/my result/?view=table,是因为客户端需要能够对未持久化的结果调用它。“结果表视图”是在此处创建的资源

类似地,我可以将结果的每个视图实现为一个单独的端点

POST/api/my result 这将创建一个新结果(不运行算法)。例如,如果结果是图像,则此POST请求可能会接受图像作为文件上载,并简单地存储它。客户机反复调用POST/api/my algorithm/,当他们对结果满意时,他们调用该端点来创建结果

我相信选项A是一种更为“宁静”的方式,但会带来持久化所有结果的开销

你推荐哪种选择?选项B能否以不同的方式实现以使其更“RESTful”?有没有一种方法可以创建一个资源,而不必将它保存在数据库中(可能是缓存中)?如果您提出缓存路由,请包括更多的解释,因为我不熟悉如何实现它

(如果相关,我将使用DRF实现API)