如何为逐步持续上传用例制作API端点?



我对Android前端REST API调用有很好的经验,但我是后端和学习Django框架的新手,所以我需要帮助设计下面的API端点。

为了更好地理解,我在这里上传了一个视频https://youtu.be/z87Hz1uHrYY。

这就是我想做的解决方案,

) HTTP-Method: POST
EndPoint URL:  /recipe/ 
Request Params: {"name":"Pizza"} "image": pizza.png 
Response Params: {"id":"123xyz"} // unique id

) HTTP-Method PATCH 
EndPoint URL: /recipe/123xyz/ 
Request Params: {"serving":2, "difficulty": "m", "prep_time": 80} 
Response Params:   {"id":"123xyz", "serving":2, "difficulty": "m", "prep_time": 80} 

) HTTP-Method: PATCH 
EndPoint URL: /recipe/123xyz/ingredients/ 
Request Params: [{"ingredient":”rice”, “amount”: “1/2”, “unit”: “g”},{"ingredient":”water”, “amount”: “1/2”, “unit”: “ml”}] 
Response Params: {"id":"123xyz", "serving":2, "difficulty": "m", "prep_time": 80, “ingredients”:  [{"ingredient":”rice”, “amount”: “1/2”, “unit”: “g”, “index”:1},{"ingredient":”water”, “amount”: “1/2”, “unit”: “ml”, “index”:2}] } 

) HTTP-Method: PATCH 
EndPoint URL: /recipe/123xyz/steps/ 
Request Params: [{"description":”abc”, “image”: “s3//step1.png”, "index": 1},{"description":”xyz”, “video”: “s3//step2.mp4”, "index": 2}] 
Response Params: {"id":"123xyz", "serving":2, "difficulty": "m", "prep_time": 80, “ingredients”:[{"ingredient":”rice”, “amount”: “1/2”, “unit”: “g”, “index”:1},{"ingredient":”water”, “amount”: “1/2”, “unit”: “ml”, “index”:2}], 
"steps":[{"description":”abc”, “image”: “s3//step1.png”, "index": 1},{"description":”xyz”, “video”: “s3//step2.mp4”, "index": 2}]}

这些是我能想到的关于下面问题的API细分。

)如何处理原料和步骤的重新排序?

)上传图片或视频时,首先上传文件并获取s3的url,然后进行/recipe/123xyz/steps/api调用。或上传文件与/recipe/123xyz/steps/API调用?

如果我错了,请随时纠正我,并为这个用例提出更好的API设计方法。

让我们试试!

如何处理原料和步骤的重新排序?

你需要一个order_key字段Ingredient模型。可以随意设置为PositiveSmallIntegerField

当你想在需要的步骤中重新排序你的成分时,你需要向API后端发送一个请求,像这样:

POST/steps/{step_id}/ingredients/reorder/

{
"ingrediends": {
"id_1": 1,
"id_2": 2
}
}

在您的视图中处理此负载,并在获取数据时通过order_key字段重新排序您的queryset

何时上传图片或视频…

在这里你可以有很多策略。其中之一:

  1. 你需要知道你的CDN (CloudFront + S3 Bucket)的域。例如mycdn.aws.com。在初始调用或成功验证等初始步骤中将其与系统信息一起发送给Android客户机。所以你的应用程序知道CDN域。

  2. 上传你的文件到后台。如果你知道它将被保存在哪里,你就会知道最终的URL。例如:

  • 文件名为uuid.avi
  • CDN域为mycdn.aws.com
  • 目标桶为video-files

所以你甚至不需要等待一些东西从后端-只需调用上传后的https://mycdn.aws.com/video-files/uuid.avi

最好将某些内容作为单独的API调用上载到文件自己的端点。您将能够轻松地管理此类请求(如果文件错误或端点不工作等,则显示用户错误消息)

上传文件到后端,而不是直接从应用程序客户端将更受欢迎,因为你不需要有应用程序发布,如果有什么变化。有些东西将被改变100%😀你需要分割责任-应用程序正在拍摄图像和视频,后端知道在哪里保存所有这些员工。