4

我正在考虑将 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 属性中的登录令牌搜索用户时,我得到了同样的错误。

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

4

1 回答 1

7

常见的关系数据库行为与 REST API 中的行为之间存在阻抗不匹配。按 id 查询虽然在关系数据库中很常见,但对于 REST API(或大多数基于 HTTP 的网站)来说并不是惯用行为。URL (href) 是指向网络资源的规范“指针”。换句话说,在 REST API 中,规范标识符href。href 中的任何标记(任何内部 'id'、特殊字符等)都应该对 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 的概念。如果是这样,请提出新的功能请求,我们将很乐意考虑。

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

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

于 2015-01-25T17:46:13.400 回答