Rest 检查用户名是否有效的API端点的最佳名称

Rest 检查用户名是否有效的API端点的最佳名称,rest,api,naming-conventions,restful-architecture,Rest,Api,Naming Conventions,Restful Architecture,我将设计一个RESTful API,用于检查调用方提供的用户名是否有任何错误(例如重复、无效字符或黑名单中列出的名称…) API应该将检查结果(有效或无效)返回给调用方,以便调用方知道他是否可以使用此用户名 如何命名API端点 我最初认为GET/checkUserName/{username}或GET/isusernamefalid/{username}是我的API的好名字。但我不确定它们是否真的很好。我不知道如何方便别人接受我的名字 GET是http方法username是调用者提供的参数 我读

我将设计一个RESTful API,用于检查调用方提供的用户名是否有任何错误(例如重复、无效字符或黑名单中列出的名称…)

API应该将检查结果(有效或无效)返回给调用方,以便调用方知道他是否可以使用此用户名

如何命名API端点

我最初认为
GET/checkUserName/{username}
GET/isusernamefalid/{username}
是我的API的好名字。但我不确定它们是否真的很好。我不知道如何方便别人接受我的名字

GET
是http方法
username
是调用者提供的参数

我读过以下两篇文章:

但是,我的API的名称似乎不适合上述文章中描述的所有准则

其中一个指导方针说

使用名词,但不要使用动词

按照这条准则,
GET/checkUserName/{username}
是不合适的。因为它包含动词
check

GET/isusernamefalid/{username}
也不合适。因为
是一个动词

如果我必须遵循RESTful设计的指导原则,那么API的最佳名称是什么


我想不出一个不包含动词的合适名称。

听起来好像您正试图构建一个RPC API,但想将其称为REST.)

有一点

通常,我会尝试建议重构,因为一般来说,验证最好在服务器端处理,定义JSON模式并与前端共享,这样他们也可以在本地使用JSON模式验证器并匹配验证

“重复”标准是JSON模式无法验证的一件事,我确信用例就是其中一个用户名框,在提交实际表单之前,它会立即反馈用户名的好坏

所以有一些方法

1.)微服务 Buzzword是的,但通常当一个小小的端点需要做一件特定的事情时,特别是当这个事情是一点RPC,API的其余部分是RESTAPI时,我使用一个小小的服务

通常为了RAD而使用的API是用PHP或Ruby编写的,并且有一些巨大的框架,但是对于一些需要快速工作的小系统,我经常使用一些较小的工具,比如Go

当然,您可以使用相同的语言,而通常的Sinatra与Rails的区别也开始发挥作用。这可能只是一个RPC

2)休息撬棍 因此,要使其成为RESTful,您只需要创建一个新的资源类型,它需要如下所示:

POST /username-checks

{ "username": "foo" }
我不太喜欢这个,但这可能是因为有一个更好的设计,我们甚至没有考虑过

3)老大哥 一旦登记表中输入了类似电子邮件的内容,请保存到目前为止在表格中填写的所有内容

这可能是一个带有填充字段的
POST/users
,默认状态为“potential”,也可能是其他一些
POST/user potential
资源。这取决于你,但是很少、很早发布的想法有两个好处

  • 你可以做废弃的购物车式的提醒,让人们“完成他们的账户”,这在电子商务世界变得越来越普遍
  • 一旦您创建了这个资源,您就有了一个UUID,您可以对它进行攻击 尝试使用无效用户名进行修补将导致验证错误

    PATCH /users/<uuid>
    
    { username: "admin" }
    
    修补程序/用户/
    {用户名:“管理员”}
    
    对于你的错误,考虑使用,这太棒了。 我不想在这里建立一个错误的三分法,可能还有一些其他的方法,但我真的会考虑1或3,2可能是我为了得到一个完整的答案而投入的。

    我实际上更喜欢这个< /P>
    POST /usernames/:username/check
    
    因为它将
    username
    转化为一种资源,为将来处理用户名的API端点铺平了道路,例如

    POST /usernames/:username/exists
    

    我计划做的是,将我想根据一些规则验证的字段与它们所属的对象分开处理,在该字段所属的对象下创建该字段的子资源,然后尝试为其创建(发布)值。如果返回409,则已经存在一个。如果它返回200 OK或201 Created,则它是有效的。400表示验证失败


    或者,我正在考虑对该字段的特定实例(用户输入的数据)执行GET,如果它返回404,那么它是唯一的,并且不存在。如果您需要执行某种业务规则验证,而不是唯一性验证,我认为这种方法不太管用。

    POST
    {username:'xyz',password:'blah'}
    to
    /authenticate
    很好,因为authenticate意味着验证凭据是否正确。或者/users/{username}/isValid?API不必检查属于用户的密码。要在“用户”上下文中包含新服务以进行验证,我会选择“/users/{username}/validation”。如果您希望在将来为其他资源扩展此验证过程,则可以执行诸如“/validation/users/{username}”之类的预修复。谢谢。但是我认为
    GET/usernames/:username/check
    更合适。因为我从API端点获取数据<代码>发布
  • 用于创建数据。