Нужен образец проекта Android REST Client, который реализует образец реализации Вершина Добжански REST

Я хочу создать REST Client на телефоне Android.

Сервер REST предоставляет несколько ресурсов, например. (GET)

http://foo.bar/customer      List of all customer
http://foo.bar/customer/4711    The customer with id 4711
http://foo.bar/customer/vip     List of all VIP customer

http://foo.bar/company           List of all companys
http://foo.bar/company/4711     The company with the ID 4711
http://foo.bar/company/vip      List of all VIP companys

Я (думаю) Я знаю, как разговаривать с сервером REST и получать нужную мне информацию. Я бы применил класс REST Client с API, подобным этому

public List<Customer> getCustomers();
public Customer getCustomer(final String id);
public List<Customer> getVipCustomer();

public List<Company> getCompanies();
public Customer getCompany(final String id);
public List<Customer> getVipCompanies();

Относится к презентации " Разработка клиентских приложений REST для Android" от Вергилия Добжански Я узнал, что не стоит обрабатывать запрос REST в рабочей теме. Вместо этого я должен использовать API Service.

Мне нравится идея иметь Singleton ServiceHelper, который привязывается к (локальной) службе, но я боюсь, что я не понял правильную концепцию сервиса.

Пока я не понимаю, как сообщить результат вызова REST (выполненный asynchrounous в службе) обратно в действие вызывающего. Я также задаюсь вопросом, нужна ли мне одна служба, которая обрабатывает все запросы REST (с разными типами возвращаемых данных), или если мне нужен выделенный сервис для каждого запроса REST.

Возможно, у меня есть много других проблем с пониманием, поэтому лучшим для меня было бы приложение sample, которое отвечает моим потребностям. Мой вариант использования не является чем-то необычным, и я надеюсь, что там есть пример приложения.

Не могли бы вы сообщить мне!

Любые другие предложения, которые указывают мне на правильное направление реализации, также полезны (Android API-Demo не соответствует моему варианту использования).

Спасибо заранее.

Клаус

РЕДАКТИРОВАТЬ. Подобные темы найдены на SO (после публикации этого), которые ведут меня в нужном мне направлении (сводя к минимуму комплексный шаблон "Доброанши" ):

Ответ 1

OverView

Edit:

Любой интерес также рассматривает возможность взглянуть на RESTful android, это может дать вам лучший обзор.

То, что я узнал из опыта по попытке внедрения модели Добжанши, заключается в том, что не все написано на камне, и он дает вам общее представление о том, что делать, это может измениться с приложения на приложение, но формула:

Следуйте этим идеям + Добавьте свой собственный = Счастливое приложение для Android

Модель в некоторых приложениях может отличаться от требования, которое может не понадобиться для учетной записи для SyncAdapter, другой может использовать C2DM, этот, который я недавно работал, может помочь кому-то:


Создайте приложение, в котором есть Account and AccountManager

Это позволит вам использовать SyncAdapter для синхронизации ваших данных. Это было обсуждено на Создайте свой собственный SyncAdapter

Создайте ContentProvider (если это соответствует вашим потребностям)

Эта абстракция позволяет вам не только обращаться к базе данных, но и обращаться к ServiceHelper для выполнения вызовов REST, поскольку он имеет метод сопоставления один на один с помощью REST Arch.

Поставщик контента | Метод REST

запрос ---------------- > GET

Вставить ---------------- > PUT

update ---------------- > POST

удалить ---------------- > DELETE

Слоивание ServiceHelper

Этот парень будет обычно запускать (а) службы, которые выполняют HEST (не обязательно протокол, но это наиболее распространенный) метод REST с параметрами, которые вы передали из ContentProvider. Я передал целое число совпадений, которое получено от UriMatcher в Провайдере контента, поэтому я знаю, к какому ресурсу REST нужно обращаться, т.е.

class ServiceHelper{

    public static void execute(Context context,int match,String parameters){
//find the service resource (/path/to/remote/service with the match
//start service with parameters 
    }

}

Сервис

Выполняется (я использую IntentService большую часть времени), и он переходит к RESTMethod с параметрами, переданными от помощника, для чего это полезно? хорошо помните, что сервис хорош для запуска вещей в фоновом режиме.

Также реализуйте BroadCastReceiver, поэтому, когда служба будет завершена, его работа уведомит мою активность, которая снова зарегистрировала эту трансляцию и запрос. Я считаю, что этот последний шаг не на конференции Виргил, но я уверен, что это хороший способ.

Класс RESTMethod

Принимает параметры, ресурс WS (http://myservice.com/service/path) добавляет параметры, готовит все, выполняет вызов и сохраняет ответ,

Если требуется authtoken, вы можете запросить у AccountManager Если вызов службы завершился неудачно из-за аутентификации, вы можете аннулировать authtoken и reauth, чтобы получить новый токен.

Наконец, RESTMethod дает мне либо XML, либо JSON, независимо от того, создаю ли процессор на основе соединителя и передаю ответ.

Процессор

Он заряжается от разбора ответа и вставляет его локально.

Пример приложения? Конечно!

Также, если вы интересны в тестовом приложении, вы смотрите Eli-G, это может быть не лучший пример, но он следует за Service REST, он построен с ServiceHelper, Processor, ContentProvider, Loader и Broadcast.

Ответ 2

Программирование Android содержит полную главу (13. Исследование поставщиков контента), посвященная "Вариант B: Использование API ContentProvider" от Virgil Google I/O.

Мы не единственные, кто видит преимущества этого подхода. На конференции Google I/O в мае 2010 года Вирджил Добжански из Google представил доклад, в котором изложены следующие три шаблона для использования контент-провайдеров для интеграции веб-сервисов RESTful в приложения Android...

В этой главе хорошо изучите второй образец подробно с помощью нашего второго примера видео Finch; эта стратегия даст ряд важных преимуществ для ваших приложений. Благодаря элегантности, с которой этот подход объединяет сетевые операции в Android MVC, weve дал ему прозвище "Network MVC".

В будущем выпуске "Программирование Android" могут быть рассмотрены два других подхода, а также более подробная информация об этой презентации Google. После того, как вы закончите читать эту главу, мы предлагаем вам просмотреть сообщения в Google.

Настоятельно рекомендуется.

Программирование Android от Zigurd Mednieks, Laird Dornin, G. Blake Meike и Masumi Nakamura. Copyright 2011 OReilly Media, Inc., 978-1-449-38969-7.

Ответ 3

"Разработка клиентских приложений REST для Android" Вирджила Добжански привела к большому дискуссиям, поскольку исходный код не был представлен во время сеанса или был предоставлен впоследствии.

  • Эталонная реализация доступна в http://datadroid.foxykeep.com (в разделе/​​презентации упоминается сессия Google IO). Это библиотека, которую вы можете использовать в своем приложении.
  • Очередность приоритетов для Android была вдохновлена ​​разговорами Добьянски и звучит очень многообещающе для меня.

Прокомментируйте, если вы знаете больше реализаций.

Ответ 4

Мы разработали библиотеку, которая ссылается на эту проблему: RoboSpice.

В библиотеке используется "сервисный подход", описанный Вергилий Добжански и Нейл Гудманн, но мы предлагаем полное решение "все-в-одном", которое:

  • выполняется асинхронно (в фоновом режиме AndroidService) запросы, которые возвратят POJO (например: запросы REST) ​​
  • кэширует результаты (в Json или Xml, или текстовые файлы или двоичные файлы)
  • уведомляет вашу деятельность (или любой другой контекст) о результате работы сети запрос, если они все еще живы
  • не уведомляет о ваших действиях результат, если они больше не живы
  • уведомляет вашу деятельность о их пользовательский интерфейс
  • использует простую, но надежную модель обработки исключений
  • поддерживает несколько ContentServices для агрегирования различных веб-сервисов результаты
  • поддерживает многопоточность выполнения запросов
  • сильно набрал!
  • является открытым исходным кодом;)
  • и протестированы

Мы действительно ищем отзывы от сообщества.

Ответ 5

Модернизация может быть очень полезной здесь, он создает для вас адаптер, который имеет очень простую конфигурацию, например:

"Дооснащение" превращает ваш REST API в интерфейс Java.

public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@Path("user") String user);
}

Класс RestAdapter генерирует реализацию интерфейса GitHubService.

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .build();

Служба GitHubService = restAdapter.create(GitHubService.class); Каждый вызов сгенерированного GitHubService делает HTTP-запрос на удаленный веб-сервер.

List<Repo> repos = service.listRepos("octocat");

для получения дополнительной информации посетите официальный сайт: http://square.github.io/retrofit/

Примечание: адаптер RestAdapter, который вы получаете из Retrofit, не является производным от BaseAdapter, вы должны сделать обертку для нее как-то так, как этот вопрос SO Почему мой ListView пуст после вызова setListAdapter внутри ListFragment?

Ответ 6

Вы должны проверить исходный код официального I/O 2010, для начала, особенно SyncService и различные классы в io subpackage.

Ответ 7

Это немного поздно, но вот статья, которая объясняет первый шаблон из разговора:

http://www.codeproject.com/Articles/429997/Sample-Implementation-of-Virgil-Dobjanschis-Rest-p

То, что мне нравится в первом шаблоне, заключается в том, что интерфейс для остальных методов является простым классом, а провайдеру контента просто предоставляется доступ к базе данных.

Ответ 8

Хорошие ребята. Реализация сервисного помощника доступна здесь: https://github.com/MathiasSeguy-Android2EE/MythicServiceHelper Это проект с открытым исходным кодом (Apache 2). Я нахожусь в начале проекта. Я сделал проект, где я определил шаблон, но я еще не извлек код, чтобы сделать чистую librairy. Это будет сделано в ближайшее время.