使用RESTAPI的数据收集最佳实践

使用RESTAPI的数据收集最佳实践,rest,jsonpath,Rest,Jsonpath,假设我有一个使用如下资源的数据收集API { user: { id:"c5667fb4-2348-4ccc-afc4-2309077a09ad" documents :[ { type:"PASSPORT", value:"1234" issue_date:"11/11/2011" }, {

假设我有一个使用如下资源的数据收集API

{
    user: {
        id:"c5667fb4-2348-4ccc-afc4-2309077a09ad"
        documents :[
            {
                type:"PASSPORT",
                value:"1234"
                issue_date:"11/11/2011"
            },
            {
                type:"DRIVING_LICENSE",
                value:"5678"
                issue_date:"11/11/2001"
            }
        ]
    }
}
对于客户感兴趣的给定用户,我需要能够通过API进行评估和响应,并要求提供任何缺少的文档-例如,用户可能在创建时只提供了PASSPORT,因此我现在只需要要求获得驾驶执照

为此,我考虑了一个控制器端点(如“评估”),以便能够发送一个响应,指示用户缺少哪些数据

客户端可以调用POST:/evaluate/c5667fb4-2348-4ccc-afc4-2309077a09ad 现在假设这个用户缺少驾驶执照,响应应该指出缺少什么,如下所示-我正在使用json路径定义我要查找的内容

{
    required_data:[
        {
            path:"user.documents[?(@.type=="DRIVING_LICENSE")].type"
        }
    ]
}

这是表达此要求的合理方式还是有更正确的方式?

如果请求中缺少某些必需信息,则这是错误情况,在这种情况下,最好提供400错误HTTP代码和错误响应正文。像这样的

HTTP Error Code: 400
Error json body:
{
    "errorCode": "Validation",
    "message": "Driving license is required"
}

我觉得这个问题的标题太宽泛了。在您的使用案例中是否需要护照和驾驶执照?如果是,是否应支持部分上传此类文件?如果是这样,您需要一种将文档附加到初始请求的方法。有几种方法可以实现这一点。在HTML中,即返回一个表单,告诉客户需要/缺少哪些信息。通过使用定制的、通用的(纯JSON)媒体类型,客户机在处理此类请求时需要带外信息,这有点违背TBH的意图。如果标题不够具体,请道歉。这里的用例有点像用户试图申请一个新产品,这需要收集更多的信息,因为一般来说(对我们来说),在入职(用户创建)时提供的信息非常少。为了提供更多的上下文,这是针对一个中间层组件的,该组件包含特定产品所需的数据,因此我暗示了如何通过API实现这一点。一般来说,就REST体系结构而言,最好的建议是设计交互流,就像处理一个基于浏览器的提供HTML页面的服务一样。您可以将HTML替换为JSON,尽管表单等重要部分也应该以这种表示格式呈现。使用的语法以及元素的语义应尽可能精确地定义,以避免混淆。理想情况下,您也可以向