我对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
何时上传图片或视频…
在这里你可以有很多策略。其中之一:
你需要知道你的CDN (CloudFront + S3 Bucket)的域。例如
mycdn.aws.com
。在初始调用或成功验证等初始步骤中将其与系统信息一起发送给Android客户机。所以你的应用程序知道CDN域。上传你的文件到后台。如果你知道它将被保存在哪里,你就会知道最终的URL。例如:
- 文件名为
uuid.avi
- CDN域为
mycdn.aws.com
, - 目标桶为
video-files
所以你甚至不需要等待一些东西从后端-只需调用上传后的https://mycdn.aws.com/video-files/uuid.avi
最好将某些内容作为单独的API调用上载到文件自己的端点。您将能够轻松地管理此类请求(如果文件错误或端点不工作等,则显示用户错误消息)
上传文件到后端,而不是直接从应用程序客户端将更受欢迎,因为你不需要有应用程序发布,如果有什么变化。有些东西将被改变100%😀你需要分割责任-应用程序正在拍摄图像和视频,后端知道在哪里保存所有这些员工。