如何为逐步连续上传用例制作 API 端点?
Posted
技术标签:
【中文标题】如何为逐步连续上传用例制作 API 端点?【英文标题】:How to make API endpoints for stepwise continuous upload use case? 【发布时间】:2021-11-24 11:10:36 【问题描述】:我在 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 设计方法。
【问题讨论】:
问题相当广泛 @ReedJones 由于我是 BE 开发的新手,我正在尝试学习正确或有效的方法来处理这个用例。我不期待任何形式的实施。 【参考方案1】:让我们试试吧!
如何处理配料和步骤的重新排序?
您的Ingredient
模型中需要有一个order_key
字段。随意将其设为PositiveSmallIntegerField
当您在需要的步骤中重新排序成分时,您需要向 API 后端发送请求,如下所示:
POST
/steps/step_id/ingredients/reorder/
"ingrediends":
"id_1": 1,
"id_2": 2
在您的视图中处理此有效负载,并在获取数据时通过 order_key
字段重新排序您的查询集。
何时上传图片或视频...
在这里你可以有很多策略。 其中之一:
您需要知道 CDN 的域(CloudFront + S3 Bucket)。例如mycdn.aws.com
。在初始调用或成功验证、其他初始步骤中将其与系统信息一起发送到 Android 客户端。因此,您的应用可以识别 CDN 域。
将您的文件上传到后端。如果您知道最终 URL 将保存在哪里,您就会知道最终 URL。例如:
uuid.avi
CDN 域是mycdn.aws.com
,
目标桶是video-files
所以你甚至不需要等待来自后端的东西 - 只需调用
https://mycdn.aws.com/video-files/uuid.avi
上传后。
最好将某些内容作为单独的 API 调用上传到文件自己的端点。您将能够轻松管理此类请求(在文件错误或端点不工作等情况下显示用户错误消息)
另外,将文件上传到后端而不是直接从应用程序客户端将更受欢迎,因为如果发生更改,您不需要发布应用程序。有些东西会 100% 改变 ? 你需要分担责任 - 应用程序正在拍摄图像和视频,后端知道将所有这些员工保存在哪里。
【讨论】:
以上是关于如何为逐步连续上传用例制作 API 端点?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:如何为 StreamBuilder 制作 http 流