我们正在使用ASP.NET Web API开发一个新的RESTful api。我们的许多客户都会收到我们的夜间数据。对于每个订阅源,我们运行一个计划SQL代理作业,该作业将触发执行SSIS包并通过电子邮件/ FTP传送文件的存储过程。有些客户可以按需运行此作业,然后接收二进制文件(xml,xls,csv,txt等)或直接传输JSON或XML数据。
主要问题是Feed通常需要一段时间才能运行。大多数都在几分钟内运行,但有一些可能需要20分钟(项目的一部分是优化这些工作)。我需要一些帮助来找到设置此api的最佳实践。
以下是我们的行动和建议的REST调用
创建Feed请求
POST ./api/feedRequest
Status 201 Created
返回正文中的feedID(JSON或XML)
我们认为POST是正确的请求类型,因为我们正在创建新请求。
轮询Feed状态 GET ./api/feedRequest/{feedID}
Status 102 Processing (feed is processing)
Status 200 OK (feed is completed)
取消Feed请求
DELETE .api/feedRequest/{feedID}
Status 204 No Content
取消Feed请求。
获取Feed
GET .api/feed/{feedID}
Status 200 OK
这将返回Feed数据。我们可能会将参数传递到标头中,以指定他们想要数据的方式。将feedType设置为"直接"在Content-Type中需要JSON或XML设置。将feedType设置为" xml"," xls"," csv"等,将二进制数据文件传回给用户。对于某些Feed,这是一个自定义模板,该模板在已存储在表中的Feed定义中指定。
问题
看来我们是否走在正确的轨道上?有任何直接的建议或疑虑吗?
我们正在尝试决定是否拥有/ feed资源和/ feedRequest资源,或者是否将所有资源保留在/ feed下。上面的场景是两种资源方法。单个资源将POST / feed用于启动请求,PUT / feed用于检查状态,GET / feed完成后。 PUT现在感觉不对,我们倾向于上述的解决方案。这看起来是对的吗?
我们关注非常大的数据集返回。我们应该将这些分解成碎片还是REST服务处理这些大的回报。有些Feed可能超过100MB。
我们还可以生成与Feed一起生成的图像,当调用Feed存储过程和包时,它们会在单独的文件中压缩。我们可以将这一切保留在同一个请求中,并在返回时调用GET / feed / {feedID} / images。
有没有人知道我们可以看到的最佳实践或良好的GitHub示例,它与MS技术类似? (我们也考虑过迁移到ASP.NET Core。