RESTful для Android, iOS...?

Моя компания перерабатывает свой API и хочет сделать все ПРАВО на это время;) Это настройка...

  • Мы доставляем данные клиентам через Интернет.
  • Клиенты - мобильные телефоны, такие как iPhone, Androids, J2ME, Blackberry...
  • Сервер закодирован в Ruby on Rails

Мы хотим достичь через рамки...

  • Используйте ActiveResource для клиентов.
  • Структура должна выполнять соединение (REST), синтаксический анализ и (динамически) предоставление моделей
  • Лицензия должна быть с открытым исходным кодом.
  • Авторизация должна быть включена. Мы используем OAuth и должны предоставлять токен доступа по любому запросу. Может быть как параметр или в HTTP-заголовке?
  • Поддержка HTTPS/SSL
  • Поддержка pagination and Relationships (с ленивой загрузкой) будет отличной! Otherwize рамки должны быть в состоянии быть приспособлены для этих вещей.

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


  • Android: RESTProvider от Novoda/Carl-Gustaf Harroch

    • Поставщики предлагают абстракцию от источников данных на Android, а RESTProvider автоматически анализирует ответы API RESTful в Провайдере. RESTProvider - это реализация всех обычно повторно реализованных функций при работе с веб-службами на Android. Пользователи могут легко взаимодействовать с любым API веб-сервисов, который обеспечивает JSON или XML в качестве ответа. Чтобы запросить RESTProvider в активности, пользователю нужно указать только конечную точку, а затем запросить функции RESTful API. RESTProvider также обрабатывает все HTTP-запросы и кеширование.
    • Не нашли много документации, кроме этого
    • Предоставляет также кеширование
    • Релиз + Документация запланирована на начало 2011 года.

  • iOS: http://iphoneonrails.com/

    • Lib для связи между iOS и Rails
    • RESTful и "ActiveResource" на основе
    • включает XML/JSON Parser
    • бесплатная лицензия
    • pagination?, android?, ленивая загрузка?


  • Android: Spring Модуль шаблонов Android Rest
    • Spring RestTemplate - это надежный, популярный Java-клиент REST. Модуль шаблона Spring Android Rest Template Module предоставляет версию RestTemplate, которая работает в среде Android.


  • Android: Структура фида
    • com.google.android.feeds
    • Коллекция классов, которая поможет вам создавать контент-провайдеров. Структура специально разработана, чтобы помочь подключить ваше приложение к веб-интерфейсам API.

Ответ 1

Я являюсь автором RESTProvider. Еще очень рано, поэтому я бы не рекомендовал использовать его в производстве. Я использую его в нескольких проектах, которые производятся, но я адаптировал большинство кодов к конкретным потребностям. Я попытаюсь получить публичный стабильный API к концу года.

Что касается переделки API, я бы предложил следующее:

  • Использование сжатия GZip
  • Использовать ETags для кеширования
  • Использовать стандарты без изменений (я видел случаи, когда именование изменилось с oauth_token на my_token, что делает большую библиотеку бесполезной без изменений) - OAuth/REST
  • Используйте создание/измененную метку времени и удаленные идентификаторы для всех объектов, чтобы включить кеширование на стороне клиента (предложения SQLite conflict): { "myobject": { "createdAt": xxxx, "rid": "hashvalue" }} 4а. Используйте хороший способ для идентификации объекта, возвращаемого для пользователя/активности/приложения: opensocial использует "id приложения" + "идентификатор пользователя" + "идентификатор активности"
  • Предпочитает JSON над XML
  • Предпочитает простоту (наименьшая возможная глубина)
  • Возвращает полный объект с отношением один к многим внутри этого объекта: { "Родитель":....   "имеет": { "полный объект не только идентификатор" } }
  • Не возвращайте только идентификаторы ( "категория": [2,3,4] должна быть "категория": [{ "имя": "тестирование", "id": 2}, { "name": производство "," id ": 3}})
  • Учитывайте, что каждый вызов не зависит друг от друга (т.е. у меня должно быть достаточно информации для вызова http://test.com/object.json для заполнения моих просмотров)

Для документации: 1. предоставить тестовые серверы 2. предоставить cUrl для тестирования 3. предоставить образцы скриптов в java/php/ruby ​​и т.д.

Это все, о чем я могу думать сейчас. Я мог бы добавить ontop этого, поскольку я прихожу с большим количеством предложений.

Ответ 2

Я бы рекомендовал взглянуть на RestKit для iOS

  • Высокопроизводительный многопоточный сетевой уровень с простым API для запросов и ответов
  • Система сопоставления объектов для сопоставления удаленных полезных нагрузок в локальных объектах декларативно (включая отношения)
  • Интеграция с основными данными для обеспечения быстрого локального кэша удаленных данных с возможностями синхронизации
  • Поддержка создания исходной базы данных из серии полезных данных JSON
  • Конкретная поддержка интеграции с бэкэндами Ruby on Rails (RKRailsRouter)
  • Лицензия на Apache
  • Используется в производстве в ряде отличных приложений (т.е. Gate Guru)