Облачные конечные точки генерируют ключ сущности внутри клиентских библиотек 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, но я не слышал о продукте, который объединяет оба.

Другие вопросы по тегам