- Взаимодействие RESTful-сервиса с Spring for Android
- Что вы создадите
- Что вам потребуется
- Создание Android-проекта
- Создание Android Manifest
- Создание строковых ресурсов
- Создание разметки
- Создание меню
- Создание класса представления
- Добавление зависимостей
- Создание activity
- Запуск клиента
- Блог Виктора Деревянко
- пятница, 24 января 2014 г.
- REST под Android. Часть 2: разрабатываем API
- Принципы разработки REST API
- Apigee
- Другие ресурсы
- Тестовый пример: набор книг
- Первая попытка описания API: список URL в текстовом файле
- Инструменты для описания API
- Вторая попытка описания API: Apiary.io
- Выводы
- 5 простых шагов к созданию сервера для тестирования android REST-запросов
- 1. NodeJS и Loopback
- 2. Создание приложения
- 3. Модели и взаимосвязи
- 4. Удаленный доступ к серверу
- Заключение
Взаимодействие RESTful-сервиса с Spring for Android
Этот урок освещает процесс создания приложения, которое использует Spring For Android RestTemplate для взаимодействия с MVC RESTful web-сервисом.
Что вы создадите
Вы создадите Android-клиент, который взаимодействует с Spring RESTful web-сервисом. В частности, клиент будет взаимодействовать с сервисом, созданным в уроке Создание RESTful Web-сервиса.
Android-клиент будет доступен через Android эмулятор и будет взаимодействовать с сервисом через запрос на:
Сервис будет отвечать JSON сообщением:
Android-клиент будет отображать ID и содержимое в форме.
Что вам потребуется
- Примерно 15 минут свободного времени
- Android Studio
- Интернет соединение
Создание Android-проекта
Создайте в Android Studio новый проект. Если хотите, можете использовать проект из каталога initial и перейти к шагу Создание класса представления. Когда вы закончите, то сможете сравнить ваш код с кодом из каталога complete и запустить клиент. Используйте «Rest» для приложения и имен модуля, а также измените имя пакета на «org.hello.rest». Укажите местоположение вашего проекта и оставьте остальные параметры как есть по умолчанию.
Следующий скрин отображает некоторые параметры для настройки иконок приложения. Оставьте как есть по умолчанию.
Следующий скрин отображает параметры для выбора типа используемого activity. Выберите «Blank Activity».
Последний скрин отображает некоторые каталоги для настроек activity, разметки и имени фрагмента. И снова оставьте как есть настройки по умолчанию и нажмите кнопку «Finish».
Когда вы создадите проект, вы увидите, что добавлены несколько файлов.
Для прохождения этого урока, вам предстоит отредактировать следующие файлы:
- Rest/src/main/AndroidManifest.xml
- Rest/src/main/res/values/strings.xml
- Rest/src/main/res/layout/fragment_main.xml
- Rest/src/main/res/menu/main.xml
- Rest/build.gradle
- Rest/src/main/java/org/hello/rest/MainActivity.java
Создание Android Manifest
После того, как вы создали проект, AndroidManifest.xml был также создан в базовом исполнении. Android Manifest содержит всю необходимую информацию для запуска Android-приложения и не может быть собрано без него. Манифест также содержит любые разрешения, которые приложение запрашивает у операционной системы Android. В нашем случае, приложению необходим доступ к интернет для создания HTTP запросов.
Добавьте INTERNET разрешение, чтобы приложение могло получить доступ к ресурсам через интернет.
Создание строковых ресурсов
Текстовые строки могут ссылаться на файловые ресурсы как из приложения, так и на другие источники. В этом уроке изпользуются четыре текстовых представления и пункт меню, где каждый из этих UI элементов нуждается в тектовом описании. Для начала, удалите строки hello_world и action_settings . Они не используются в этом учебном материале, поэтому могут быть удалены. Затем добавьте строки id_label , id_value , content_label , content_value и action_refresh для каждого UI виджета на будущее.
Создание разметки
Файл разметки является местом, где вы определяете визуальную структуру пользовательсткого интерфейса вашего приложения. Когда вы создали проект, Android Studio добавило фрагмент разметки. Как следует из названия, фрагмент разметки представляет собой часть общей разметки. В нашем случае, фрагмент разметки использован для отображения некоторого текста в главном activity. Удалите существующий «Hello world» TextView , который был добавлен автоматически изначально при создании проекта. Затем измените фрагмент разметки, включив в него четыре TextView виджета.
Разметка включает некоторую информацию о расположении и размере виджетов. Android Studio отображает визуальное представление разметки в окне предварительного просмотра:
Создание меню
Проект содержит меню для главного activity с существующим пунктом «Settings». Удалите этот пункт и добавьте пункт «Refresh». Обратите внимание, что для значения пункта меню также используется строковый ресурс.
Android Studio отображает визуальное представление разметки в окне предварительного просмотра:
Создание класса представления
По медели JSON данных, полученных из RESTful HTTP запроса, вам необходимо создать класс представления, который определяет поля. Перейдите в «org.hello.rest» пакет из панели Project. Выберите «New. » из меню «File».
Выберите «Java Class»
Добавьте переменные id и content , а также их методы получения(getters).
Добавление зависимостей
Чтобы использовать Spring for Android RestTemplate , вам необходимо добавить соответсвующие Maven зависимости в файл сборки Gradle. RestTemplate позволяет использовать Jackson, мощный JSON обработчик для Java.
Создание activity
Шаблон проектирования Model-View-Controller(MVC) широко используется в Android приложениях. Activity управляет представлением, которое является разметкой, уже созданной вами. Когда вы создали проект, MainActivity было создано с реализацией по умолчанию. Измените его, чтобы совершать RESTful HTTP запросы и обновлять представление. Каждое изменение пояснено ниже.
Для начала, добавьте частный класс HttpRequestTask . Этот класс наследуется от AsyncTask , который представляет собой механизм Android для выполнения потенциальных, долговременных действий вне главного UI потока. Это очень важно, т.к. иначе вы бы заблокировали UI, вынуждая пользователя поверить в то, что приложение не отвечает или завершилось с ошибкой.
Spring предоставляет шаблонный класс RestTemplate . Он позволяет взаимодействовать с большинством RESTful сервисами. В методе doInBackground класса HttpRequestTask , RestTemplate использован для создания HTTP запроса и разбора JSON ответа в Greeting объект. Когда doInBackground заканчивается, вызывается метод onPostExecute , в котором текстовые значения виджетов greetingIdText и greetingContentText обновляются результатом HTTP запроса.
Далее, добавьте метод onStart с вызовом метода execute класса HttpRequestTask . Метод onStart является частью жизненного цикла Activity и вызывается при запуске activity. В результате, HTTP запрос выполнится, когда приложение загружается.
Напоследок, обновите метод onOptionsItemSelected , чтобы также выполнять HTTP запрос, когда пункт меню «Refresh» выбран. Это позволяет вам совершать дополнительные HTTP запросы без необходимости закрывать и перезапускать приложение.
Запуск клиента
Теперь вы можете запустить приложение из Android Studio. Для этого нажмите кнопку проигрывателя(зеленый треугольник) на панели инструментов Android Studio. Перед вами откроется диалоговое окно с выбором устройства, на котором будет запущено приложение. У вас должно быть Android-устройство, либо эмулятор, настроенный для запуска приложения. Если у вас нет настроенного Android Virtual Device (AVD), то вы можете выбрать кружочек для создания нового.
После выбора устройства, Android Studio соберет и развернет приложение:
ID значение будет увеличиваться каждый раз при нажатии кнопки обновления в меню.
Поздравляем! Вы только что разработали простой REST-клиент, используя Spring for Android.
Источник
Блог Виктора Деревянко
О жизни, о программировании. Все публикуемые исходные коды можно взять здесь
пятница, 24 января 2014 г.
REST под Android. Часть 2: разрабатываем API
Прежде чем переходить к разработке тестового проекта на RoboSpice, необходимо определиться с API для тестового проекта. Разумеется, можно взять одно из готовых API — благо их сейчас сотни. Однако гораздо интереснее написать свое, тем более, что это нетривиальный процесс. Рассмотрим, как пишутся REST API, какие инструменты для этого существуют, и попробуем реализовать простейшее тестовое API.
Принципы разработки REST API
Apigee
Там же на отдельной странице собраны примеры готовых REST API (github, twitter и т.д.). Специальная консоль позволяет поработать с выбранным API прямо из браузера.
Другие ресурсы
- Книга RESTful Web APIs (2013) by Leonard Richardson, Mike Amundsen, Sam Ruby.
- REST+JSON API Design — Best Practices for Developers: slides, video
- Best Practices for Designing a Pragmatic RESTful API by Vinay Sahni
- REST and JSON API guidelines and best practices by Niels Krijger — удобная шпаргалка, краткая компиляция из других источников.
- HTTP: The Definitive Guide by David Gourley, Brian Totty, Marjorie Sayer, Anshu Aggarwal, Sailu Reddy. В книге детально рассмотрен HTTP протокол, на котором в большинстве случаев реализуются REST API. Так же HTTP посвящена отдельная глава «HTTP for APIs» в книге «RESTful Web APIs».
Тестовый пример: набор книг
Первая попытка описания API: список URL в текстовом файле
Договоримся, что для формат представления ресурсов можно задавать следующим образом:
Теперь зафиксируем способ обработки ошибок. Будем считать, что в случае успеха сервер возвращает код 200 — OK , в случае ошибки один из следующих кодов: 400 — Bad Request, 500 — Internal Server Error . Для наших целей вполне достаточно, хотя можно задействовать и другие коды.
В случае ошибки сервер обязан вернуть сообщение с расшифровкой ошибки в формате:
Осталось описать формат представления ресурса и списков ресурсов.
- [1] получить полный список книг
- [2] получить информацию о книге
- [3] добавить книгу в набор
- [4] удалить книгу из набора
- [5] редактировать информацию о книге
- [6] провести поиск книг по автору, по названию — аналогично [1]
Инструменты для описания API
Вторая попытка описания API: Apiary.io
В целом, работа с API Blueprint Language не вызвала каких-то особых проблем. Смутил только один момент, с которым так и не удалось разобраться. Я создал ресурс Book: и действия к нему Параметр fields может использоваться только с GET, а в PATCN и DELETE его быть не может. Набор параметров я задаю отдельно для каждого действия. Тем не менее, в документации для Edit и Delete параметр fields присутствует в URL, что несколько сбивает с толку. Причем ниже, в списке возможных параметров, он отсутствует.
Выводы
- Прежде чем разрабатывать собственное REST API, имеет смысл ознакомиться как минимум с Web API Design. Crafting Interfaces that Developers Love (pdf), чтобы не наделать грубых ошибок.
- Сервис apiary.io — весьма функционален. Разрабатывать REST API на нем гораздо удобнее, чем в просто фиксировать список URL в текстовом файле. Возможность проверки реализации на соответствие спецификации и Mock-сервер стоят того, чтобы потратить время на изучение API Blueprint Language.
Цель достигнута — BooksSet REST API для тестового проекта создано. Переходим к разработке проекта. Об этом — в следующий раз.
Mindmap, созданный в процессе работы над этой статьей, можно скачать здесь, в формате Freemind 1.0 (портативная версия: freemind-bin-1.0.0.zip).
Update Mock-сервер Apiary не поддерживает компрессию gzip. Может когда-нибудь сделают, особенно если за эту функцию проголосует достаточное количество пользователей.
Источник
5 простых шагов к созданию сервера для тестирования android REST-запросов
Не так давно возникла необходимость реализации в android приложении общения с API сервера посредством REST-запросов. Реализовать программную часть на android не составило большого труда, в связи с наличием удобной и простой библиотеки Retrofit. Однако, написав пару GET/POST-запросов к существующим открытым API (например, Github и прочие стандартные примеры Retrofit) возникла необходимость начать тестировать логику работы приложения. В данном случае, конечно бы хотелось иметь свой сервер, содержащий свои модели данных и имеющий взаимосвязи между моделями, а также различные уровни доступа к конкретным моделям данных. В данной статье я хотел бы рассказать, как за несколько маленьких шагов создать локальный сервер, добавить необходимые модели, настроить взаимосвязи между ними и обеспечить удаленный доступ к данному серверу.
Сразу хотелось бы уточнить, дабы избежать недопонимания со стороны читающих:
Я, также как и те, для кого предназначена данная статья, являюсь новичком в реализации серверной части, попавшим по воле обстоятельств в ситуацию, в которой я был вынужден сам для себя, максимально быстро поднять api, для тестирования android приложения. Вся информация представленная в статье по крупицам может быть найдена на просторах google и youtube и найти ее и собрать в единое целое не составит особого труда, если знать что искать. Однако это требует времени на принятие решений о технологической реализации, а также на поиск информации для каждого конкретного решения.
1. NodeJS и Loopback
Первое, что нужно сразу уточнить, сервер будет реализован с использованием Node.js-фреймворка Loopback. Для начала установим сам Node.js. Последнюю версию Node.js находится на сайте nodejs.org/en/download, скачиваем ее и устанавливаем.
После этого запускаем командную строку и вводим следующею команду и ждем окончания процесса:
2. Создание приложения
Для создания нового приложения (вашего сервера) для фреймворка Loopback необходимо в командной строке перейти в директорию, в которой будет располагаться ваш сервер, ввести команду lb и ответить на ряд вопросов о приложении, среди которых:
- имя приложения (в моем случае, test_server)
- имя каталога, для проекта (оставить пустым, тогда в данной директории создастся папка с названием проекта)
- версия LoopBack (выбираем текущую версию)
- вид приложения (формально говоря — шаблон приложения. Выбираем api-server)
После завершения процесса создания приложения, переходим в созданную папку с файлами приложения и пробуем запустить его следующей командой:
Приложение запускается на локальном адресе: localhost:3000/explorer. При этом приложение уже имеет модель User и ряд REST-функций.
Формально говоря, ваш сервер готов и успешно обрабатывает локальные запросы. Проверить доступность и работу сервера можно с помощью приложения Postman или вашего android приложения.
3. Модели и взаимосвязи
Далее необходимо создать модели с данными и взаимосвязи между ними. Рассмотрим, простой пример модели и взаимосвязей: представим, что наше приложение выдает отзывы на фильмы. Вы вводите название фильма и должны получить все отзывы для данного, конкретного фильма. Таким образом в базе данных у Вас, в самом примитивном случае, должно храниться две модели: Movie (имеет поля: name, year) и Review (autor, description). Взаимосвязь у моделей следующая, один фильм может иметь много отзывов.
Таким образом REST-запрос к фильмы будет иметь такую ссылку localhost:3000/api/Movies, а к списку отзывов такую localhost:3000/api/Movies/
Создадим две эти модели на сервере:
Ответим на следующие вопросы о модели:
- имя модели (например, Movie)
- источник данных для подключения (выбираем db (memory))
- базовый класс модели (выбираем PersistedModel)
- показывать модель с помощью REST API (Да)
- пользовательская множественная форма (оставляем пустым)
- общая модель или только сервер (выбираем общую (common))
Теперь модель создана и к ней необходимо добавить поля (для Movie это например name и year):
- имя свойства(например, name)
- тип свойства (например, string)
- является ли обязательным (Да)
- показывать модель с помощью REST API (Да)
- значение по умолчанию (оставляем пустым)
После добавления всех свойств, увидев предложение добавить еще одно, просто нажмите «Enter». Также добавляем вторую модель.
Теперь необходимо настроить взаимосвязь между ними. Пишем команду и отвечаем на вопросы:
- выберите модель, для создания взаимосвязи (например, Movie)
- тип связи (выбираем has many (один ко многим), так как один фильм имеет много отзывов)
- выбираем модель для взаимосвязи (в нашем случае, Review)
- имя связи (любое, я напишу reviews)
- пользовательский ключ (оставляем пустым)
- промежуточная модель (Нет)
- разрешить вложение связей (Нет)
- отключить связь от следующих подключенных объектов (Нет)
Все. Теперь запускаем сервер, той же командой, что и ранее и смотрим localhost:3000/explorer . Видим, что у нас появились наши модели и видно взаимосвязь между ними через id.
4. Удаленный доступ к серверу
Сейчас доступ к серверу ограничен домашней сетью, что не совсем удобно при тестировании с телефона. Попробуем сделать ваш сервер удаленным. Для этого необходимо скачать ngrok, распаковываем в любое удобное место и запускаем. Данная программа предназначена для создания туннеля для вашего localhost:3000, чтобы создать для него удаленный доступ по сгенерированой ссылке. Вводим в ngrok следующие команду:
Видим, что программа создала туннель и теперь ваш сервер доступен по представленной ссылке. Имейте введу, что при каждом перезапуске ПК, ссылка в ngrok будет меняться.
Заключение
Выше было представлено, достаточно грубое и сухое описание процесса создания простейшего NodeJs сервера, для тестирования вашего android приложения. Естественно существует масса нюансов связанных даже с теми 4-мя шагами, что я описал.
Помимо того, что я уже описал, всего одной командой можно изменить уровень доступа к api и организовать аутентификацию пользователей. Если кому то интересно — задавайте вопросы в комментариях — отвечу. Сам фреймворк имеет достаточно подробную документацию, в том числе стартовые главы переведены на русский (хоть и для версии 2.0 с другим набором команд)
Да примитивно, да где-то технически глупо, где-то слишком просто, но, для человека, не занимающегося серверными технологиями и нуждающегося в быстром решении для тестирования своих основных задач это решение является максимально простым и быстрым.
Источник