gpt4 book ai didi

rest - 设计带有要从浏览器使用的二进制数据的其余Web服务的最佳方法

转载 作者:行者123 更新时间:2023-12-03 08:58:16 26 4
gpt4 key购买 nike

我正在开发一个json rest网络服务,该服务将通过一个使用ribs.js构建的网页应用程序使用

该API将允许使用者上传与某个实体相关的文件,例如与项目相关的pdf报告

仔细研究并在堆栈溢出处进行一些研究,我想到了以下可能的方法:

第一种方法: base64编码数据字段

POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}

第二种方法:多部分表单发布:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}

作为回应,我将获得一个报告ID,并以此发布另一篇文章
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data

然后只发送二进制数据

(看看这个: https://stackoverflow.com/a/3938816/47633)

第三种方法:将二进制数据发布到单独的资源中,并保存href

首先,我在客户端生成一个随 secret 钥,并将二进制内容发布到客户端
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data

接着
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}

(请参见: https://stackoverflow.com/a/4032079/47633)

我只是想知道我是否可以使用其他方法,每种方法的优缺点,以及是否存在确定的方式来处理此类要求

我对第一种方法的最大缺点是,我必须在客户端上完全加载文件并对其进行base64编码

一些有用的资源:
  • Post binary data to a RESTful application
  • What is a good way to transfer binary data to a HTTP REST API service?
  • How do I upload a file with metadata using a REST web service?
  • Bad idea to transfer large payload using web services?
  • https://stackoverflow.com/a/5528267/47633
  • 最佳答案

    我的研究结果:

  • 单个请求(包括数据)

    该请求包含元数据。数据是元数据的属性,并且已编码(例如:Base64)。

    优点:
  • 事务性
  • 每次有效(不丢失元数据或数据)

  • 缺点:
  • 编码使请求非常大

  • 例子:
  • Twitter
  • GitHub
  • Imgur
  • 单个请求(多部分)

    该请求包含一个或多个带有元数据和数据的部分。

    内容类型:
  • multipart/form-data
  • multipart/mixed
  • multipart/related

  • 优点:
  • 事务性
  • 每次有效(不丢失元数据或数据)

  • 缺点:
  • 内容类型协商很复杂
  • WADL中看不到数据的
  • 内容类型

  • 例子:
  • Confluence(包含用于数据和元数据的部分)
  • Jira(其中一部分用于数据,元数据仅一部分用于文件名和mime类型的标题)
  • Bitbucket(一部分用于数据,无元数据)
  • Google Drive(其中一部分用于元数据,另一部分用于元数据)
  • 单个请求(HTTP header 和URL中的元数据)

    请求主体包含数据和HTTP header ,URL包含元数据。

    优点:
  • 事务性
  • 每次有效(不丢失元数据或数据)

  • 缺点:
  • 没有可能的嵌套元数据

  • 例子:
  • S3 GetObjectPutObject
  • 两个请求

    一个元数据请求和一个或多个数据请求。

    优点:
  • 可伸缩性(例如:数据请求可以转到存储库服务器)
  • 可恢复(例如参见Google Drive)

  • 缺点:
  • 不是事务性
  • 并非每次都有效(在第二个请求之前,缺少一部分)

  • 例子:
  • Google Drive
  • YouTube
  • 关于rest - 设计带有要从浏览器使用的二进制数据的其余Web服务的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415398/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com