据我所知,如果我正在为应用程序创建一个带有express的RESTapi,那么路由定义的顺序很重要。例如,如果我按照以下顺序写我的路线:
app.get('/users/:username', user.get);
app.get('/users/list', user.listAll);
则永远无法访问user.listAll,并且当向"/users/list"发出请求时,服务器会将"list"分配给username参数。因此,很明显,您希望颠倒这些路线的声明顺序。但在这里,如果用户创建了一个用户名为"list"的帐户,我们也会遇到同样的问题,对吧?
那么,如何防止用户创建带有"keywords"的名称呢?在这里,关键字被定义为与api路由冲突的字符串。
我能想出两种方法,但似乎都不令人满意。首先,您可以保留一个字符串黑名单,将其与每次创建的用户名进行比较。但保持这种状态将是一场噩梦。第二,只需在数据库中预先创建这些用户(只要用户名是唯一的)。这似乎有点古怪,但我想不出有多少反对它的理由
这个问题有简单的解决办法吗?
好问题。我不久前就遇到过这种情况。你一定是像我一样来自网络背景,因为你正试图使用"slug"方法对API进行用户可读的调用。使用可读的蛞蝓是伟大的,实际上在网站上更受欢迎!在API中,实际上没有一种方法可以做到这一点。我看过很多方法,但我只知道一种方法,可以使它以适用于几乎所有用例的方式进行扩展和描述。
始终使用ID
- 一个用户:/users/:id
- 列表:/users/
- 好友:/users/:id/好友
- 1个用户的1个朋友:/users/:id/朋友/:id
上面是可扩展的,并且仍然是描述性的!此外,我使用版本控制。(例如:/v1/用户)。这使我能够将API升级到v2,同时仍然支持较旧的客户端:)
现在如何查找特定用户使用过滤器。。怎样
/v1/用户?username=:username
以上操作将始终返回用户列表。如果用户名是唯一的,这仍然是一个列表,但只有一条记录或只是一个空列表。
使用HTTP方法POST PUT GET DELETE
- POST on/users(201个已创建用户)
- 对/users执行PUT/DELETE操作(不允许使用400方法)(可选择删除所有??不推荐)
- 在/users/:id上放置/DELETE(200成功)
- POST on/users/:id(400用户已存在)
希望这能解决您的问题:)