T.M. SoftStudio

feci quod potui, faciant meliora potentes

Google Cloud Endpoints

Google Cloud Endpoints состоит из инструментов, библиотек и возможностей, которые позволяют создавать интерфейсы и клиентские библиотеки из App Engine приложения, называемые как API backend, чтобы упростить доступ клиента к данным из других приложений. Конечные точки делают проще создание веб-backend для веб-клиентов и мобильных клиентов, таких как Android или Apple.

Для мобильных разработчиков, конечные точки обеспечивают простой способ разработки общего веб-бэкенда, а также обеспечивает критически важные объекты инфраструктуры, такие как OAuth аутентификацию 2.0.
Кроме того, поскольку API backend это приложение App Engine, мобильный разработчик может использовать все услуги и функции, доступные в App Engine, такие как хранилище данных, Google Cloud Storage, Mail, URL Fetch, очереди задач, и так далее. И, наконец, с помощью App Engine для бэкенд, разработчики освобождаются от работы системного администратора, балансировки нагрузки, масштабирования и обслуживания сервера.
 
Можно создать мобильного клиента для App Engine бэкэнда без конечных точек. Однако, использование конечных точек делает этот процесс проще, потому что он освобождает вас от необходимости писать обёртки для обработки связи с App Engine. Клиентские библиотеки, создаваемые Endpoints, позволяют просто сделать прямые вызовы API.
 
Важно: Google Cloud Endpoints требует SSL.
 
API бэкэнд это приложение App Engine, которое выполняет бизнес-логику и другие функции для Android и IOS клиентов, а также веб-клиентов JavaScript. Функциональность backend становится доступной для клиентов через конечные точки, которые представляют API, который клиенты могут вызывать.
 
Примечание: Вы не можете вызывать Google Cloud Endpoint непосредственно из push task queue или cron job.
 
 
Google Cloud Endpoints обеспечивают следующие библиотеки и инструменты:
 
Библиотека Endpoints в SDK.
Maven артефакты для создания новых проектов API backend, генерирации клиентских библиотек и документации.
В качестве альтернативы Maven, инструмент командной строки (endpoints.sh для Linux) или endpoints.cmd (для Windows), которые можно использовать для создания клиентских библиотек и документации
Другой альтернативой  Maven является Endpoints поддержка в Google Plugin для Eclipse.
Endpoints обеспечивают Tic Tac Toe проект, который демонстрирует бэкэнд API. 
 
Требования
 
Для использования конечных точек, убедитесь, что вы используете последнюю версию Google App Engine Java SDK. Если вы используете Google Plugin для Eclipse (GPE) для генерации конечных точек и клиентских библиотек, вам нужно иметь последнюю версию GPE.
 
Процесс разработки
 
Общая схема для разработки приложения с помощью конечных точек:
 
1. Создайте свой проект бэкэнд API (используя Maven, это самый простой метод), а затем написать свой код API бэкэнд.
2. Аннотировать API бэкэнд код, так что классы и клиентские библиотеки могут быть сгенерированы из него. (В качестве альтернативы, используйте Google Plugin для Eclipse, который может аннотировать для вас.)
3. Создайте клиентские библиотеки, используя Maven, или endpoints.sh инструмент командной строки. (Другой вариант заключается в использовании Google Plugin для Eclipse для создания клиентской библиотеки.)
4. Написать клиентское приложение, используя клиентскую библиотеку, делая вызовы API backend.
 
"App Engine Java Endpoints Module" Template
 
Этот шаблон использует Google Cloud  Endpoints для определения RESTful API бэкэнд из очень простых аннотаций Java кода на стороне сервера. Google Cloud Endpoints также обеспечивают Java объект маршаллизации / демаршаллизации в JSON, генерации сильно типизированных клиентских библиотек, которые могут быть вызваны из вашего Android приложения, встроенную поддержку аутентификации и так далее.
 
 Добавление backend в Android Studio
Чтобы добавить backend к существующему Android приложению, откройте Android Studio и перейдите к "Файл → Новый модуль ..." или щелкните правой кнопкой мыши на вашем проекте и выберите «Создать → Модуль".
 
В "New Module" мастерt, который появляется, выберите "Google Cloud Module":
Затем выберите "App Engine Java Endpoints модуль".
 
Введите имz модуля / пакетf для нового backend, и выберите модуль "клиент" в вашем проекте, который содержит ваше Android приложение.
 
Клиентский модуль будет установлен для вызова вашего вновь сгенерированного бэкенда. Название модуля, который вы ввели будет использоваться в вашем проекте Android-Studio. Имя пакета будет использоваться для всех классов, импортированных из этого шаблона и (обратно) для Endpoints API имен. В свою очередь, Endpoints API пространство имен будет использоваться для получения имени автоматически сгенерированной Android клиентской библиотеки, следовательно, это гарантирует, что имена генерируемых клиентских библиотек будет соответствовать вашему имени пакета.
 
Пересоберите ваш проект (через "Build → Rebuild Project") и запустите конфигурацию запуска. Это вызывет задачу appengineRun в Gradle плагине для App Engine, которая, в свою очередь вызовет локальный сервер App Engine Java.
 
Чтобы убедиться, что ваш backend стартовал успешно, перейдите к http://localhost:8080. 
 
Подключение Android приложение к backend
 
Когда вы создали модуль бэкэнд, строго типизированные клиентские библиотеки были автоматически сгенерированы для вас. Эти клиентские библиотеки вновь собраны вместе с модулем бэкэнд. Кроме того, ваше Android-приложение, ("Клиент") модуль, было настроено, чтобы включить зависимости от этих сгенерированных клиентских библиотек, доступ в Интернет и так далее.
 
Чтобы начать отправку запросов добавленному Cloud Endpoints backend API, вы можете использовать следующий фрагмент кода. В частности, этот фрагмент показывает, как создать AsyncTask, который делает запрос к бэкэнд и печатает входящий результат в тост в данном контексте:
class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> {
    private static MyApi myApiService = null;
    private Context context;

    @Override
    protected String doInBackground(Pair<Context, String>... params) {
        if(myApiService == null) {  // Only do this once
            MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
                    new AndroidJsonFactory(), null)
                // options for running against local devappserver
                // - 10.0.2.2 is localhost's IP address in Android emulator
                // - turn off compression when running against local devappserver
                .setRootUrl("http://10.0.2.2:8080/_ah/api/")
                .setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
                    @Override
                    public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
                        abstractGoogleClientRequest.setDisableGZipContent(true);
                    }
                });
                // end options for devappserver

            myApiService = builder.build();
        }

        context = params[0].first;
        String name = params[0].second;

        try {
            return myApiService.sayHi(name).execute().getData();
        } catch (IOException e) {
            return e.getMessage();
        }
    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(context, result, Toast.LENGTH_LONG).show();
    }
}

Для того, чтобы сделать фактический вызов, вызовите EndpointsAsyncTask из вашей Android деятельности. Например, чтобы выполнить из класса MainActivity, добавьте следующий фрагмент кода в метод MainActivity.onCreate:

new EndpointsAsyncTask().execute(new Pair<Context, String>(this, "Manfred"));

Тестирование приложения в эмуляторе

Если вы внесли разрешение доступа в Интернет для вашего AndroidManifest.xml файла, добавили зависимости компиляции в build.gradle файл Android App, и добавили вызов EndpointsAsyncTask к одной из ваших активностей Android приложений, должно быть все готово, чтобы проверить ваш бэкэнд локально!
 
Во-первых, запустите свой бэкенд локально, как описано в разделе 1.1. и убедитесь, что вы можете получить к нему доступ с помощью http://localhost:8080. Затем измените конфигурацию запуска вашего Android приложения и запустите Android эмулятор.
 
Развертывание бэкенд на App Engine
 
Если бэкэнд программа работает локально, вы можете развернуть ее на Google App Engine.
 
Остановите бэкенд, если он работает локально, выбрав Run > Stop.
 
Запустите Build > Deploy Module to App Engine.
 
Тестирование 
 
После того, как вы установили свой бэкенд для App Engine, вы можете подключить ваше Android приложение к нему, изменяя класс EndpointsAsyncTask:
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
        .setRootUrl("https://android-app-backend.appspot.com/_ah/api/");