RESTFUL API中的几个登录

时间:2013-06-27 14:19:21

标签: java spring rest restful-authentication spring-integration

我们正在设计一个需要支持多种登录服务的RESTFUL API。

Custom login:  ptgapi/v1/clients/{clientId}/users?mode=custom
FB login:      ptgapi/v1/clients/{clientId}/users?mode=facebook
Twitter login: ptgapi/v1/clients/{clientId}/users?mode=twitter
LinkedIn login: ptgapi/v1/clients/{clientId}/users?mode=linkedin
Create user:   ptgapi/v1/clients/{clientId}/users

我们在服务之上有一个Spring Integration层,所以在提供的路径的基础上,需要激活其中一个服务。

我们的想法是拥有一个捕获入站网关输入的路由器,并根据有效负载值重定向流。

<int-http:inbound-gateway id="v1.login.inbound.gateway" path="/ptgapi/{apiVersion}/clients/{clientId}/users" .../>

但是这里'创建用户'的路由过程与其他路由过程相同......我认为这是一个难闻的气味。

通过更好地分离关注点来获得它是一种更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

服务可能具有相同的路径/路由,但它们由操作识别。在REST中,您将拥有相同的服务路径,但根据您正在执行的操作类型,HTTP方法将有所不同。您可以使用POST和PUT HTTP方法区分登录和创建服务。

就个人而言,我相信PUT是一个更好的选择,因为PUT提供了更多的控制,例如:

  • 您是否明确指定了您创建的URL对象,还是让服务器决定?如果您为它们命名,则使用PUT。如果您让服务器决定然后使用POST。
  • PUT是幂等的,所以如果你将对象PUT两次,它就没有效果。这是一个很好的属性,所以我会尽可能使用PUT。
  • 您可以使用具有相同对象URL的PUT更新或创建资源

关于PUT与POST的更多信息

PUT 意味着放置一个资源 - 用不同的东西完全替换给定URL上的任何可用资源。根据定义,PUT是幂等的。你可以多次这样做,结果是一样的。 x = 5是幂等的。您可以输入资源,无论它是否存在(例如,创建或更新)!

POST 更新资源,添加辅助资源或导致更改。 POST不是幂等的,就像x ++不是幂等的一样。

答案 1 :(得分:1)

对于用户CRUD,您应该有 ptgapi / v1 / clients / {clientId} / users 之类的路由,并使用HTTP方法,因为它们应该: strong> GET 用于返回用户 PUT 以创建用户 POST 用于更新用户, 删除 以将其删除。

登录操作本身不是用户实体操作。您应该有另一条路线,就像 ptgapi / v1 / clients / login 一样,并通过POST(最好是加密)传递登录参数。

答案 2 :(得分:0)

创建用户是一个动作,所以也许你可以定义一个新的路线,如

Create user:   ptgapi/v1/clients/{clientId}/users/new

或类似的东西。