Облачные конечные точки генерируют ключ сущности внутри клиентских библиотек Android/iOS
Есть ли способ в Android Java создать ключ сущности?
Например, внутри кода Java-модуля Cloud Endpoints вы можете сделать это:
Key<User> userKey= Key.create(User.class, userId);
или с Предком:
Key<Post> postKey= Key.create(userKey, Post.class, postId);
Как вы можете сделать вышеупомянутое в сгенерированной клиентской библиотеке Android? Я хочу посмотреть, смогу ли я создать ключ в Android и передать его методу API (вероятно, как websafeKey userKey.getString()
).
БОНУС: Как вы можете сделать это с клиентской библиотекой target-C Cloud Endpoints?
1 ответ
Я сомневаюсь, что вы хотите или хранилище данных, или объективировать код в вашем приложении для Android. Это просто не то, что принадлежит. Таким образом, путь заключается в том, чтобы взглянуть на источник KeyFactory. В методе keyToString()
мы можем видеть, что большая часть магии происходит в классе KeyTranslator в методе convertToPb()
,
Вот код convertToPb:
public static Reference convertToPb(Key key) {
Reference reference = new Reference();
reference.setApp(key.getAppId());
String nameSpace = key.getNamespace();
if (!nameSpace.isEmpty()) {
reference.setNameSpace(nameSpace);
}
Path path = reference.getMutablePath();
while (key != null) {
Element pathElement = new Element();
pathElement.setType(key.getKind());
if (key.getName() != null) {
pathElement.setName(key.getName());
} else if (key.getId() != Key.NOT_ASSIGNED) {
pathElement.setId(key.getId());
}
path.addElement(pathElement);
key = key.getParent();
}
Collections.reverse(path.mutableElements());
return reference;
}
И вот код keyToString()
public static String keyToString(Key key) {
if (!key.isComplete()) {
throw new IllegalArgumentException("Key is incomplete.");
} else {
Reference reference = KeyTranslator.convertToPb(key);
return base64Url().omitPadding().encode(reference.toByteArray());
}
}
Теперь, что вы хотите сделать, это заменить материал Key в convertToPb на "нормальные" параметры (тип, имя / ключ, родительский тип, родительское имя / ключ) и, таким образом, переписать метод для создания websafeKey без фактического Key
объект.
Хотя было бы намного проще, если бы API вашего движка приложений просто принимал идентификаторы и вы воссоздали бы ключ со стороны appengine. Мои API обычно структурированы как
/user/<userId>/post/<postId>
если я предполагаю, что сущность выглядит следующим образом
@Entity public class Post {
@Parent Ref<User> user
@Id id; }
Относительно бонуса: Что (черт возьми) является конечной точкой облака Objectify? Я знаю Cloud Endpoints и Objectify, но я не слышал о продукте, который объединяет оба.