我们正在设计一个需要支持多种登录服务的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" .../>
但是这里'创建用户'的路由过程与其他路由过程相同......我认为这是一个难闻的气味。
通过更好地分离关注点来获得它是一种更好的方法吗?
谢谢!
答案 0 :(得分:1)
服务可能具有相同的路径/路由,但它们由操作识别。在REST中,您将拥有相同的服务路径,但根据您正在执行的操作类型,HTTP方法将有所不同。您可以使用POST和PUT HTTP方法区分登录和创建服务。
就个人而言,我相信PUT是一个更好的选择,因为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
或类似的东西。