Подключение к хранилищу данных AppEngine в разработке через API Cloud Datastore
В настоящее время мы работаем с комбинированным приложением AppEngine / GCE и до сих пор сохранили доступ к хранилищу данных на стороне AppEngine. Теперь мы также изучаем возможность использования нашим экземпляром GCE некоторых запросов в (общее) хранилище данных. Для начала я пытаюсь выяснить, как управлять вещами локально. Что у нас так далеко:
- Go devappserver работает
- Автономный двоичный файл Go, который хочет отправлять запросы в хранилище данных devappserver.
- Мы установили ('go get') google-api-go-client/datastore/v1beta2, чтобы мы могли использовать API вместо прямых HTTP-вызовов. Однако мы определенно готовы выполнять прямые HTTP-вызовы, если эта библиотека API не будет работать в разработке.
- У нас настроены сервисные учетные записи (мы уже обращаемся к GCS из GCE), но я сомневаюсь, что это актуально для локального запуска...
Я видел некоторые документы, но они (а) говорят только о Python и Java и (б) обсуждают подключение к (автономному) серверу хранилища данных разработки, в отличие от хранилища данных, встроенного в devappserver AppEngine (если они даже отличаются?), Здесь также есть следующий ответ на Stackru, но опять же обсуждается подключение к автономному серверу хранилища данных разработки:
Как подключиться к локальному облаку Google Datastore db?
Любые указатели будут высоко оценены!
- Ян
2 ответа
В настоящее время это невозможно в среде разработки по нескольким причинам. Инструмент Google Cloud Datastore (gcd.sh) использует сервер разработки Java. Однако при разработке go для App Engine вы используете сервер разработки python, который имеет другое базовое хранилище. Существует ошибка для отслеживания этой проблемы на странице GitHub.
Вы по-прежнему можете разрабатывать приложение Google Cloud Datastore на ходу, однако в текущей клиентской библиотеке go есть много ошибок. К сожалению, сервер разработки в настоящее время не поддерживает JSON API, который использует библиотека go (см. Примечание вверху страницы).
Обновление: я хотел удостовериться, что комментарий проппи был замечен как часть ответа. Его предложение действительно позволяет использовать версию протокола API, которая, вероятно, более стабильна, чем указанная выше клиентская библиотека go. Это также может позволить вам использовать gcd.sh
инструмент для проверки этого на сервере разработки. Однако вам придется самостоятельно создавать запросы HTTP, и вы не сможете обмениваться данными в хранилище данных между вашим приложением и облачным хранилищем данных в процессе разработки. Однако это, безусловно, хороший обходной путь, позволяющий использовать API Cloud Datastore, с которым по мере его разработки будет легче работать, чем с другими обходными путями. Из проппи:
Обратите внимание, что вы все еще можете использовать API-интерфейс Cloud Datastore Protobuf HTTP с Go. Определение protobuf доступно на GitHub, вы можете скомпилировать его в код Go с помощью плагина компилятора Go protobuf и затем отправлять HTTP-запросы POST по адресу
/datastore/{version}/datasets/{datasetId}/{method}
,
Если сценарий использования с вашего сервера приложений "GO" достаточно прост, вы можете реализовать доступ с помощью вызова API к вашей службе GAE (возможно, расширение службы для приема вызовов API).
Это дает дополнительное преимущество, заключающееся в необходимости вносить изменения только в одном месте, если изменяются определения или функции хранилища данных.