2015-01-25 5 views
4

Я думаю об использовании Stormpath с его API Java в качестве пользовательского хранилища.Как искать пользователей по ID и customData в Stormpath

Выглядит хорошо, за исключением того, что я не могу найти пользователей.

Например, я получаю эту ошибку:

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.

Похоже, что я хочу сделать, потому что это похоже, что единственные свойства, которые вы можете запросить, - это электронная почта и имя пользователя. Но почему они предоставляют эту функциональность, если она не работает. Что мне не хватает?

ответ

7

Существует несоответствие импеданса между обычными поведениями реляционных баз данных и действиями в REST API. Запрос по id, хотя и является общим в реляционных базах данных, не является идиоматическим поведением для API REST (или большинства веб-сайтов на основе HTTP). URL (href) является каноническим «указателем» на ресурс в Интернете. Другими словами, в REST API канонический идентификатор равен href. Любой токен внутри href (любой внутренний «id», специальные символы и т. Д.) Должен быть непрозрачным для клиентов REST и полностью игнорироваться клиентами. URL-адреса являются королями в HTTP и REST.

В этом случае SDK Stormpath пытается быть верным лучшим методам RESTful, поэтому вы можете получить любой ресурс Stormpath с помощью метода client.getResource, который принимает href и тип объекта, который вы ожидаете от представления href:

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

это говорит, что нет ничего плохого в желании, чтобы это было более удобно представить в клиенте API, например, client.getAccount(String id) если вы хотите сохранить понятие идентификаторов. Если это так, пожалуйста, откройте новый feature request, и мы будем очень рады рассмотреть его.

Что касается запрашиваемых Account объектов, это documented here. Stormpath скоро сделает данные в Custom Data также доступными для поиска. В то время как сроки службы Stormpath никогда не объявляются, это самый высокий инженерный приоритет компании, и он скоро должен выйти.

Одним из способов, которые полезны для некоторых людей, является хранение данных, которые они хотят искать, в Поля счета, которые вы не используете в своих приложениях. Например, вы можете использовать поле «второе имя» для хранения, скажем, любимого цвета. Это будет временным до тех пор, пока не будет доступен пользовательский поиск данных. НТН!

+0

Эй, спасибо за ваш ответ! :) Вы разработчик Stormpath? Я использую аналогичное обходное решение. Я поместил UUID в поле имени пользователя и для процесса входа в систему, я просматриваю учетную запись с входящей электронной почтой, вывожу из нее имя пользователя и проверяю подлинность на Stormpath. Довольно грязное обходное решение и латентность между 600 мс - 3000 мс, но оно работает, и это нормально. Но я с нетерпением жду возможности поиска данных. Это функция kickass! :) – nxrd

+0

Рад помочь! Я технический директор Stormpath. Мы также выставим поле «customId» на ресурсах в ближайшее время, поэтому вы можете указать свой собственный уникальный идентификатор на ресурсах (в дополнение к тому, который мы укажем). Спасибо за ваш отзыв! (Сторона примечания: если ответ приемлемый, не могли бы вы наградить ответ? Спасибо!) –

+1

@LesHazlewood был достигнут какой-либо прогресс в поисковых материалах для пользовательских данных? Это было бы очень полезно для тех вещей, которые мы делаем, в настоящий момент мы вынуждены использовать поле «middleName» для поиска, которое не очень велико :( – James

 Смежные вопросы

  • Нет связанных вопросов^_^