Api 在REST GET请求中传递两个必需参数的最佳实践

Api 在REST GET请求中传递两个必需参数的最佳实践,api,api-design,Api,Api Design,我正在设计一个API,我有两个必需的参数,这两个参数对于这个操作是必需的 我有两个选择通过他们 (一) /服务器/server\u id/exte/device\u id/agent/agent\u id/live\u监控 缺点:太长了 (二) /服务器/服务器id/实时监控?设备id=23和代理id=767 缺点:这些参数不应该是查询参数,因为它们是必需的,不是可选的 我应该使用哪种方法?您最好使用查询参数(这是RESTful方法),但如果没有提供查询参数,则在端点端处理它们以返回错误 例如,

我正在设计一个API,我有两个必需的参数,这两个参数对于这个操作是必需的

我有两个选择通过他们

(一) /服务器/server\u id/exte/device\u id/agent/agent\u id/live\u监控

缺点:太长了

(二) /服务器/服务器id/实时监控?设备id=23和代理id=767

缺点:这些参数不应该是查询参数,因为它们是必需的,不是可选的


我应该使用哪种方法?

您最好使用查询参数(这是RESTful方法),但如果没有提供查询参数,则在端点端处理它们以返回错误

例如,在php中,您可以执行以下操作:

if (!isset($_GET['device_id']))
    echo json_encode(array("error"=>"You need to provide device_id"));
if (!isset($_GET['agent_id']))
    echo json_encode(array("error"=>"You need to provide agent_id"));
你应该决定

  • 如果此参数定义子资源,则应使用 /父/:id/child/:child\u id url
  • 如果此参数仅用于过滤数据,则应使用?param_1=parm_1_值
关于长url 如果您不需要检查访问权限或其他属于父资源的内容,则可以使用

/server/{:server_id|/exte/{:device_id}/agent/{:agent_id}/live_monitoring

但这将是两种不同的资源

/agent/{:agent_id}/live_monitoring