English 中文(简体)
REST Web Services Design
原标题:REST Web Services API Design
  • 时间:2010-01-20 19:53:35
  •  标签:
  • rest

只是想得到反馈,了解我计划如何设计我的APIC。 下面的血清方法。 这里的结构:

GET http://api.domain.com/1/users/ <-- returns a list of users
POST http://api.domain.com/1/users/add.xml <-- adds user
POST http://api.domain.com/1/users/update.xml <-- updates user
DELETE (or POST?) http://api.domain.com/1/users/delete.xml <-- deletes user

问题:

  1. Is it OK to use just GET and POST?
  2. Is it a good idea that I plan to rely on the filename to indicate what operation to do (e.g. add.xml to add)? Would it be better to do something like this: POST http://api.domain.com/1/users/add/data.xml?
  3. What s a good way to keep these resources versioned? In my example, I use a /1/ after domain name to indicate version 1. Alternatives would be: http://api1.domain.com... or http://api-1.domain.com... or http://apiv1.domain.com... or http://api-v1.domain.com... or http://api.domain.com/v1/... or
  4. What s the best way to authenticate?
最佳回答

(1) 在你的设计上可能不会。 POST不是一站不住脚的! 因此,你不应用于更新或删除,而应使用《标准指示》和《标准指示》。

2) 更好的选择是将头盔(Content-Type)用于“WS”呼吁,例如:申请/xml

3) 也可在座标-Type u上使用:申请-v1.0/xml

4) 不能确定是最佳的,但可能是最容易的办法是在RFC 2617上使用吉卜赛人基金会建立的认证机制。 例如:

问题回答

在你向教育、科学和技术部挖掘之前,你确实需要掌握一些术语:

资料来源:您准备在“User”号文件中提供的材料/数据。

URI——一个普遍独特的ID,用于一个资源。 不应提及正在采用的方法(例如,不应包含“附加”或“替代”)。 然而,您的《世界投资倡议》的结构却使您的知之甚少——这是一个常见的误解。

统一接口——一套固定的作业 在多数情况下,你可以按自己的资源行事: rel=“noreferer” HTTP。 每种做法都有明确的定义。

你们的《世界投资倡议》现在最令人不安的是,它们掌握了在它们中开展行动的信息。 URIs是国际发展学会,更不用说!

让我们树立一个真正的世界榜样。 我的名字是Nathan。 “Nathan”可以视为我的身份证(或以其他方式认为URI——就这个例子而言,我是唯一的“Nathan”人。 我的国名/国名没有改变,因为你们想与我互动,例如。 当你要问我时,我的名字不会改变为“NathanSayHello”。

它对教育、科学和技术部来说也是如此。 http://api.domain.com/users/1“rel=“noreferer”http://api.domain.com/users/1。 页: 1 http://api.domain.com/users/1/update.xml。 当你想更新该用户时。 你希望更新这一用户的事实是你重新使用的方法所隐含的。

这里,我建议贵协会

# Retrieve info about a user 
GET http://api.domain.com/user/<id>

# Retrieve set all users
GET http://api.domain.com/users

# Update the user IDed by api.domain.com/user/<id>
PUT http://api.domain.com/user/<id>

# Create a new user.  The details (even <id>) are based as the body of the request
POST http://api.domain.com/users

# Delete the user ID d by api.domain.com/user/<id>
DELETE http://api.domain.com/user/<id>

关于您的问题:

  1. 酌情使用PUT和DELETE,避免超负荷使用POST来履行这些职能,因为它打破了。 HTTP POST的定义。 HTTP是您的统一接口。 您与APIC用户就他们如何期望与您的服务互动签订了合同。 如果你打破了吉大港山区,你就会打破这一合同。

  2. 完全取消“附加”。 利用吉大港山区遥感方案(HTTP)中方头盔来说明所公布数据的奇米类型。

  3. 您是否提到您的APIC或资源版本? ETag和其他应灾负责人可以使用这一资源。

  4. 这里有许多选择。 基本吉大港 Auth (easy but insecure), Digest Auth, Customs auth as AWS. OAuth也是一种可能性。 如果安全具有重大意义,我就使用SSL的客户。

  1. 在教育、科学和技术领域,吉大港山区“平均”用于表示作业类型:你获得一定能力,只用“GET”和“POST”来表述欧安会的所有业务。

  2. 无:资源统一法通常是指“文件识别符号”应当出现在何处。

  3. “文件”的版本可在开发/修改上述资源时,在吉大港山区应用方案的回复中转交。 服务器应有责任独特地确定资源——试图在客户方面这样做将证明是一项艰巨的挑战,即保持一致性。

当然,这个专题有许多不同之处。

我确实根据头盔进行认证。 类似于

X-Username:happy-hamster
X-Password:notmyactualpassword

If you re concerned about security - do it through SSL. Other implementations exist, of course. F或instance, Amazon with their S3: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html?RESTAuthentication.html

如果你没有能力提出PUT和DELETE的要求,那么它就认为通过POST实现这些要求的良好做法。 在本案中,诉讼在《欧洲刑法》中有明确规定。 如果我正确回顾一下,名册确实如此:

POST http://example.com/foos/2.xml/delete

POST http://example.com/foos/3.xml/put

...

<foo>
    <bar>newbar</bar>       
</foo>

它只是一个截断点,但关于版本和教学总则,你可能希望对CouchDB进行考察。 http://books.couchdb.org/relax”rel=“nofollow noreferer”

Using post for create and delete functionality is not a good rest api design strategy. Use Put to create, post to update and delete to delete the resources. For more information on designing rest apis follow the link - best practices to design rest apis





相关问题
Allow RESTful DELETE method in asp.net mvc?

im currently setting up asp.net to accept DELETE http verb in the application. However, when i send "DELETE /posts/delete/1" i always get a 405 Method not allow error. I tried to take a look at ...

Most appropriate API for URL shortening service

I ve just finished an online service for shortening URLs (in php5 with Zend Framework); you can enter an URL and you get an short URL (like tinyurl and such sites). I m thinking about the API for ...

Use HTTPClient or HttpUrlConnection? [closed]

We re implementing a REST client on JRE 1.4. Seems two good options for a client REST framework are HttpClient and HttpUrlConnection. Is there a reason to use HttpClient over the JRE s ...

Why can t I find the truststore for an SSL handshake?

I m using the Spring RESTTemplate on the client side to make calls to a REST endpoint. The client in this case is a Spring app and Tomcat is the servlet container. I m running into issues making a ...

Which Http redirects status code to use?

friendfeed.com uses 302. bit.ly uses 301. I had decided to use 303. Do they behave differently in terms of support by browsers ?

Three Step Buyonline The RESTful way

We are re-developing our buyonline functionality and we are doing it the RESTful way. The process is a three step one and the customer is asked to enter data at each step. Let s say the three URL s ...

热门标签