我正在为我们的网络应用设计REST API。
POST> / apps>创建一个应用程序
PUT> / apps / {id}>更新应用
我想启动这些应用。 这是REST,如果没有,我怎样才能使它更加RESTful?
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}
答案 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