如何在Stormpath中按ID和customData搜索用户

时间:2015-01-25 12:03:52

标签: stormpath

我正在考虑将Stormpath与其Java API一起用作用户存储。

看起来不错,但我无法搜索用户。

例如,我收到此错误:

Exception in thread "main" com.stormpath.sdk.resource.ResourceException: HTTP 400, Stormpath 2105 (http://docs.stormpath.com/errors/2105): Account ID is not a supported query property.

执行此查询时:

HashMap<String, Object> queryParams = Maps.newHashMap();
queryParams.put("ID", "4mPXXXXXXXXXX");
searchResult = application.getAccounts(queryParams);

通过电子邮件搜索用户但是有效。当我尝试通过存储在customData属性中的登录令牌搜索用户时,我得到了同样的错误。

看起来我想做的事情是不可能的,因为看起来你可以查询的唯一属性是电子邮件和用户名。但是,如果它不起作用,他们为什么会提供这种功能。我错过了什么?

1 个答案:

答案 0 :(得分:7)

常见的关系数据库行为与REST API中的行为之间存在阻抗不匹配。通过id查询虽然在关系数据库中很常见,但它并不是REST API(或大多数基于HTTP的网站)的惯用行为。 URL(href)是规范的指针&#39;到网上的资源。换句话说,在REST API中,规范标识符 href。 href内的任何令牌(任何内部&#39; id&#39;,特殊字符,等等)对REST客户端应该是不透明的,并且完全被客户端忽略。 URL在HTTP和REST中是最重要的。

在这种情况下,Stormpath SDK尝试忠实于RESTful最佳实践,因此您可以使用client.getResource方法获取任何Stormpath资源,该方法接受href以及您期望href的对象类型代表:

String href = "https://api.stormpath.com/v1/accounts/" + id;
Account account = client.getResource(href, Account.class);

也就是说,希望在客户端API中更方便地表示它是没有错的,例如client.getAccount(String id)如果你想保留ID的概念。如果是这样,请打开一个新的feature request,我们将非常乐意考虑它。

对于可查询的Account属性,这些属性为documented here。 Stormpath也将很快使自定义数据中的数据也可搜索。虽然Stormpath功能时间表从未公布,但它是公司最高的工程优先级,它很快就会推出。

对某些人有用的一种解决方法是将他们想要搜索的数据存储在您不在应用程序中使用的帐户字段中。例如,您可以使用&#39;中间名称&#39;字段存储,比方说,喜欢的颜色。在自定义数据搜索可用之前,这只是暂时的。 HTH!