如何防止在Express中的RESTapi调用中使用冲突关键字



据我所知,如果我正在为应用程序创建一个带有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用户已存在)

希望这能解决您的问题:)

相关内容

  • 没有找到相关文章

最新更新