如果我传递以下URI / apps / {id}?control = start,它是REST吗?

时间:2011-07-17 03:54:12

标签: api rest modeling

我正在为我们的网络应用设计REST API。

POST> / apps>创建一个应用程序
PUT> / apps / {id}>更新应用

我想启动这些应用。 这是REST,如果没有,我怎样才能使它更加RESTful?

  1. POST> / apps / {id}?control = start
  2. Sun Cloud API执行此操作:http://kenai.com/projects/suncloudapis/pages/CloudAPISpecificationResourceModels

    或者是否更好:
    2. PUT / apps / {id}并在响应Json / XML中包含一个状态参数?
    3. POST / apps / {id}并在响应Json / xml中包含一个status参数?
    4. POST / apps / start?app = {id}

4 个答案:

答案 0 :(得分:2)

我认为这里正确的问题更多的是HTTP动词是否按预期使用,而不是应用程序是否尽可能地具有RESTful。然而,现在这两个概念几乎相同。

关于PUT的问题是,无论你PUT你应该能够立即GET。换句话说,PUT批量替换资源。如果存储在apps/5的资源是具有“控制”属性作为其状态的一部分的资源,则control = start部分应该是您放置的表示的一部分。如果您只想发送新资源,那么您正在进行PATCH,而不是PUT。

PATCH没有得到广泛支持,所以恕我直言,你应该使用POST。 POST没有安全或幂等的要求;通常,您可以使用POST(或多或少)执行任何操作,包括修补资源的一部分。毕竟,当您使用POST在集合中创建新项目时,您将执行此操作。更新资源的一部分并没有太大的不同。

通常,您在请求正文中POST新数据,而不是查询参数。查询参数主要用于GET,因为您可以查询。 :)

答案 1 :(得分:2)

启动应用是否会更改状态? (例如,“运行”)如果你正在做的事情是更新资源的状态(应用程序)。这似乎是PUT操作的一个很好的用途。虽然正如Ray所说,如果控制是资源状态的一部分,PUT请求的主体应该包含您正在更新的状态。我相信可以进行部分更新(CouchDB使用它)。

另一方面,如果启动应用程序意味着创建新资源(例如,表示应用程序执行),则POST方法非常适合。你可以这样:

POST /app/1/start

哪会产生HTTP/1.1 201 Created。然后,要访问有关已创建执行的信息,您可以使用如下URL:

GET /app/1/execution/1

对我来说,这似乎是一种很好的“宁静”方法。有关详细信息,请查看此article

答案 2 :(得分:1)

PUT apps/{id}

我会将应用程序的状态从off更新为on

答案 3 :(得分:-1)

我喜欢做类似的事情,

POST /runningapps?url=/app/1