RESTAPI:在哪里设置点格式部分?

RESTAPI:在哪里设置点格式部分?,api,rest,format,Api,Rest,Format,在我们公司,我们将引入一个RESTAPI来获取各种系统的一些系统变量的每小时测量值 REST API的外观如下所示: https://api.fubar.com/v1/hourlyMeasureValues/2014021723-2014032305/system/4711,4712,4713/variables/speed,pressure,temperature?sortOrder=-time&valueTypes=avg,min,max 这将获取测量值 时间范围为2014年2月

在我们公司,我们将引入一个RESTAPI来获取各种系统的一些系统变量的每小时测量值

REST API的外观如下所示:

https://api.fubar.com/v1/hourlyMeasureValues/2014021723-2014032305/system/4711,4712,4713/variables/speed,pressure,temperature?sortOrder=-time&valueTypes=avg,min,max
这将获取测量值

  • 时间范围为2014年2月21日23:00至2014年3月23日
  • 对于我们的系统4711、4712和4713
  • 对于速度、压力和温度变量
按照“时间递减”的排序顺序,我们将获取每小时平均值、每小时最小值和每小时最大值

现在的问题是:设置结果内容类型(JSON、XML、CSV)有一些替代方法

  • 将“接受:应用程序/json”等放在标题中
  • 为类型添加查询参数,例如[…]valueTypes=avg、min、max&type=xml
  • 在基本URL中添加.format
  • 我们想要解决方案3

    这是正确的位置吗

    https://api.fubar.com/v1/hourlyMeasureValues.csv/2014021723-2014032305/system/4711,4712,4713/variables/speed,pressure,temperature?sortOrder=-time&valueTypes=avg,min,max
    

    或者其他地方?

    我认为您将滥用REST生成报告。我不喜欢将系统放入URL的想法——对我来说,每个系统都是另一个REST资源。变量看起来像是对资源内容的过滤——最好使用查询参数进行过滤。我的建议是:

    https://api.fubar.com/v1/system/4711/hourlyMeasureValues.json?
    range=2014021723,2014032305&variables=speed,pressure,temperature
    &sortOrder=-time&valueTypes=avg,min,max
    
    如果您在一次呼叫中确实需要多个系统,那么我会将其更改为以下形式:

    https://api.fubar.com/v1/reports/hourlyMeasureValues.json?
    systems=4711,4712,4713&range=2014021723,2014032305
    &variables=speed,pressure,temperature&sortOrder=-time&valueTypes=avg,min,max
    

    如果您使用的是HTTP上的REST,那么您应该遵循的原则(参见第71页)

    根据您所做的工作,您可能需要的不仅仅是内容类型,还可以实现适当的内容协商。例如,给定客户机可能仍然希望接收特定编码或语言的内容

    但无论如何,HTTP方法是在头中设置所有这些内容

    GET /myurl
    Accept: application/json
    Accept-Charset: ISO-8859-7
    Accept-Language: en
    
    服务器使用这些信息来确定要发送回客户端的正确响应

    200 OK
    Content-Type: application/json; charset=ISO-8859-7
    Content-Language: en
    
    没有“正确”的位置——这是一个毫无意义的概念。您的API框架应该能够在URI中放置扩展的任何地方使用suss。考虑到URI现在的存在,这对我来说似乎是最合理的地方


    请注意,我同意Piotr和Edwin的观点。

    如果您选择第三种解决方案。你必须指定数百万个页面或URL,对吗?这是一个糟糕的选择。这是我的意见。内容类型协商应该使用
    Accept
    标题完成。您的客户机应该在标题中发送它期望的内容类型,您的服务器相应地生成内容,并使用相应的
    内容类型
    标题集发送响应。对我来说,这是剩下的路。