如果我使用express为应用程序创建REST api,据我所知,路由定义的顺序很重要。例如,如果我按以下顺序编写路线:
app.get('/users/:username', user.get);
app.get('/users/list', user.listAll);
然后永远无法访问user.listAll,服务器将分配' list'在向' / users / list'发出请求时使用username参数。因此很明显,您想要颠倒这些路线声明的顺序。但是,如果用户使用用户名'列表',那么我们会遇到同样的问题,对吧?
那么如何防止用户使用'关键字创建名称?其中关键字在此定义为与api路由冲突的字符串。
我可以想到两种方式,但它们似乎都不令人满意。首先,您可以保留一个与每个用户名创建比较的字符串黑名单。但保持这将是一场噩梦。第二,只需在数据库中预先创建这些用户(只要用户名是唯一的)。这种看起来有点像hacky,但我无法想到许多反对它的论点。
这个问题有一个简单的解决方案吗?
答案 0 :(得分:3)
好问题。我刚才面对这个。您必须来自像我这样的Web背景,因为您正在尝试使用'slug'方法来对用户进行API调用。使用可读的slugs非常棒,在网站中实际上是首选!在API中实际上没有一种方法可以做到这一点我已经看到很多方法可行,但我只知道一种方法,使其可扩展和描述,几乎适用于所有用例。
始终使用ID
以上是可扩展的,仍然是描述性的!另外我使用版本控制。 (例如:/ v1 / users)。这允许我将API升级到v2,同时仍支持旧客户端:)
现在如何查找特定用户? 使用过滤器! ..怎么样?
/ V1 /用户的用户名=:用户名
以上始终会返回用户列表。如果用户名是唯一的,那么它仍然是一个列表,但只有一个记录或只是一个空列表。
使用HTTP方法POST PUT GET DELETE
希望这能解决你的问题:)