Json API后端点和图像处理

Json API后端点和图像处理,json,database,api,software-design,Json,Database,Api,Software Design,因此,对于我的android应用程序,我不仅获得了我想通过JSON格式发布到API端点的某些数据,而且其中一个数据块也是一个图像。除了图像之外的所有内容都会进入postgresql数据库。我想把图像放在某个地方(不重要的地方),然后把该图像的链接放在数据库中 事情是这样的,当图像连接到我发送到API端点并放入数据库的其他数据块时,我会将图像发送到其他地方,然后在不同的时间放入链接。这是我试图克服的心理体操: 我如何发送这两个独立的数据块(一个图像,然后是单个JSON对象中的所有其他数据),并将与

因此,对于我的android应用程序,我不仅获得了我想通过JSON格式发布到API端点的某些数据,而且其中一个数据块也是一个图像。除了图像之外的所有内容都会进入postgresql数据库。我想把图像放在某个地方(不重要的地方),然后把该图像的链接放在数据库中

事情是这样的,当图像连接到我发送到API端点并放入数据库的其他数据块时,我会将图像发送到其他地方,然后在不同的时间放入链接。这是我试图克服的心理体操:

我如何发送这两个独立的数据块(一个图像,然后是单个JSON对象中的所有其他数据),并将与该JSON对象关联的图像放入数据库,而不会由于多个用户执行相同的操作而使图像和数据混淆

为了简化,假设我将以下信息作为单个JSON对象发送到名为
api.example.com/frontdoor
的端点。对象的外观如下所示:

{
  "visitor_id": "5d548e53-c351-4016-9078-b0a572df0bca",
  "name": "John Doe",
  "appointment": false,
  "purpose": "blahblahblah..."
}
该JSON对象由服务器使用,然后放入数据库中各自的表中

同时,拍摄图像并将uuid作为文件名发送到
api.example.com/face
,然后服务器对其进行处理,并在适当的数据库条目行中添加指向图像的链接

问题是,我如何做到这一点?我如何将发送到两个不同位置的这两条数据关联起来

最后,我计划使用一个单独的端点,例如
api.example.com/visitors
提供一个JSON对象,其中包含所有访问的列表,如下所示:

{
  "visits": [
               {
                 "visitor_id": "5d548e53-c351-4016-9078-b0a572df0bca",
                 "name": "John Doe",
                 "appointment": false,
                 "purpose": "blahblahblah..."
                 "image": "imgbin.example.com/faces/c3118272-9e9d-4c54-8824-8cf4cfaa679f.png"
               },
               ... 
            ]
}

主要是,我正试图让我的头脑围绕着所有这些的设计,这样我就可以开始编写代码了。任何帮助都将不胜感激。

据我所知,您的问题是在涉及两个不同子服务的服务器端执行一个操作-一个服务更新sql db中的文本数据,另一个服务存储图像,然后将图像的引用放回主数据。我想到了两种方法

1) 在客户端生成一个唯一的id并将其与json对象上载和图像上载相关联。然后在上传图像时,图像上传服务可以获取此ID,在SQL中找到相应的记录并更新图像路径。但是,不建议使用生成客户端唯一ID的方法,因为可能会发生冲突,导致多个客户端生成相同的ID,从而破坏逻辑。为了解决这个问题,在上传之前,客户端可以调用一个ID生成服务,该服务将在服务器端唯一地生成ID并将其发送回客户端,然后客户端可以使用相同的方法执行上传步骤。这种方法的缺点是客户端需要额外调用服务器以获取唯一ID。这种方法的优点是,用户界面可以获得数据和图像的单独更新,就像数据上传服务成功时一样,它可以说数据已成功更新,当图像在稍后某个时间点上载时,则可以说图像上载已完成。因此,在这种情况下,可以对每个上传的响应进行不同的管理。但是,如果数据和图像上传必须同时进行并且必须是原子的(如果数据或图像上传失败,则整个上传将失败),则不能使用这种方法,因为服务器必须在事务中对这两个操作进行分组

2) 另一种方法是为图像和数据上传提供一个公共端点。图像和数据在一次对服务器的调用中一起上载,服务器首先生成一个唯一ID,然后对数据上载服务和图像上载服务进行两次并行调用,这两个子服务调用都将此唯一ID作为参数。如果两个上传都必须是原子的,那么服务器必须在事务中对这些子服务调用进行分组。关于返回响应,它可以是同步的或异步的。如果UI需要一直等待上传成功,那么响应将是同步的,服务器必须等待这两个子服务完成后才能返回响应。但是,如果用户界面不需要一直等待,那么服务器可以在调用这些子服务后立即响应,并显示一条消息,表明上传请求已被接受。在这种情况下,子服务调用是异步处理的

在我看来,方法2更好,因为这样服务器可以更好地控制相关操作的分组。关于响应,这取决于用例。如果用户关心他的帖子是否被正确地记录在服务器上(比如付款),那么最好采用同步实现。但是,如果用户启动该操作并离开(如生成报告或发送电子邮件),则可以使用异步实现。异步实现在服务器利用率方面更好,因为服务器可以自由地接受其他请求,而不是等待子服务的操作完成

这是两种通用方法。我相信对于这个问题会有几种不同的方法,或者可能有完全不同的方法

啊,答案太长了,希望有帮助。如果还有其他问题,请告诉我