2010-09-25 3 views
1

Я разрабатываю приложение iphone, которое использует веб-сервис php для всех функций. Я планирую создавать объекты модели для связи между моим пользовательским интерфейсом и веб-сервисом.iphone & rest web service - что такое лучшая практика?

Лучше ли создавать классы моделей на php для связи между моделями iphone и базой данных? или это нормально, чтобы напрямую общаться из базы данных в мои классы моделей для iphone?

Какое из приведенных ниже правильных способов обработки этого сообщения?

  • iphone-ui- => IPhone-модель-классы => Веб-сервис ==> базы данных
  • iphone-Ui => IPhone-модель-классы => PHP-модель-классы => Web -service ==> база данных
+1

Вы хотите иметь доступ (сортировать, анализировать, обрабатывать) свои данные модели в php? – hotpaw2

+0

Нет, я просто хочу иметь возможность читать некоторые данные из базы данных и вставлять некоторые данные в базу данных. php должен отвечать только за передачу моих данных. – aryaxt

ответ

0

Зачем использовать PHP вообще? Просто используйте соответствующую библиотеку базы данных и подключитесь к базе данных непосредственно с устройства!

Есть много причин, почему вы могли бы хотеть что-то, сидя между телефоном и сервером базы данных:

  • Аутентификация
  • Проверка данных/проверка целостности
  • Вход/аудит
  • Схема изменения

Полноценные классы моделей могут показаться немного тяжеловесными (особенно, поскольку PHP d oesn't cache ничего), но вам нужно решить, как вы хотите делать вещи на стороне сервера. В частности, вы можете использовать классы моделей и уровень персистентности, чтобы избежать прямого взаимодействия с Sqlite/MySQL/Postgres/ODBC/blah.

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

EDIT: я играл адвоката дьявола.

«Соединение» с базой данных часто является просто подключением к TCP (хотя почти все современные POSIXish DB поддерживают подключение через Unix-сокеты, что несколько более безопасно). Обычно вам необходимо реализовать протокол БД; самый простой способ - использовать библиотеку C с поддержкой DB (libpq5 для Postgresql 8.4, libmysqlclient16 для MySQL 5.1 и т. д.). Я почти уверен, что iOS не включает их по умолчанию (но старые версии OSX IIRC использовались для Postgres).

Однако, это очень плохо по соображениям безопасности:

  • Большинство дистрибутивов Linux настройка серверов БД, чтобы слушать только на Unix сокетов (то есть вы не можете подключиться к ним с помощью локального хоста). Гораздо проще управлять доступом (только люди, которые могут получить доступ к файлу, могут подключаться), а также позволяет упростить аутентификацию (вы можете получить идентификатор пользователя процесса на другом конце соединения, что означает, что вам не нужно пароли вообще — это конфигурация по умолчанию для Postgres).
  • Большинство конфигураций, которые позволяют подключаться через TCP, делают так, потому что библиотеки Java DB обычно не поддерживают сокеты Unix (потому что реализация «чистой Java», возможно, имеет свои преимущества, несмотря на крошечный объем собственного кода, который вам нужен для использования сокетов Unix).Обычно это разрешает только соединения с localhost (не случайные места в Интернете).
  • Если вы довольны всем Интернетом, имеющим доступ только для чтения к соответствующим таблицам, тогда это может быть разумным. В противном случае вам понадобится какой-то контроль доступа:
    • Разрешить более широкий Интернет для записи в вашу базу данных плохо. Вы не можете просто вставить пароль в свое приложение; приложение будет разбито в течение нескольких дней/недель, и если злоумышленник будет достаточно любопытным, пароль будет извлечен.
    • Элементы управления доступом к базам данных - для каждого БД или для таблицы, тогда как вы хотите контролировать доступ к каждой строке (то есть пользователь может видеть свою собственную строку в таблице «пользователи», но не для строки для других пользователей) .data для других пользователей).
    • Базы данных, как правило, не имеют ограничений по скорости для учетных записей в аккаунтах, что делает его тривиальным для совершения онлайн-атаки с использованием bruteforce.

И снова, вы очень редко хочу телефон, чтобы говорить непосредственно в базу данных. Это означает, что ваше приложение перестает работать при обновлении схемы (нет-нет, вы не должны принуждать пользователей к обновлению). Возможно, можно собрать некоторые представления/триггеры/etc в качестве уровня совместимости. Icky.

Во-вторых, реляционные базы данных, как правило, плохо подходят для реальных приложений. Вы хотите прокрутить вниз по таблице. Каждая ячейка загружается из строки базы данных. Каждая строка загружается по сети ... ouch. (После использования CoreData один раз, я никогда не хочу оглядываться назад. Это делает мою жизнь намного проще. Хотя я бы не использовал ее на стороне сервера (наши серверы запускают Debian, а наши веб-службы в основном написаны на Python), если я Я собираюсь написать приложение в Objective-C, Core Data больше не добавляет блокировку поставщика — Я не знаю никого, кто серьезно относится к GNUstep.

Вместо этого он помогает рассмотреть API, который вам нужен чтобы представить веб-клиенту. Большинство веб-сервисов (Facebook, Twitter, возможно, других), похоже, представляют собой довольно «тупую», плоскую модель мира. Напишите простейшую вещь, которая позволяет вам реализовать требуемый API. Это может означать использование классы моделей, если это достаточно легко сделать (абстракция модели Google App Engine хороша, основываясь на абстракции моделирования Django, по-видимому).

+0

«Просто используйте соответствующую библиотеку баз данных», можете ли вы предоставить более подробную информацию об этом? Можно ли напрямую подключиться к базе данных (за пределами устройства)!?!?!?! – aryaxt

Смежные вопросы