веб-сервис iphone & rest - какова лучшая практика? - PullRequest
1 голос
/ 25 сентября 2010

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

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

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

  • iphone-ui- => iphone-модель-классы => веб-сервис ==> база данных
  • iphone-ui => iphone-модель-классы => php-модель-классы => веб-сервис ==> база данных

1 Ответ

0 голосов
/ 02 октября 2010

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

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

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

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

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

РЕДАКТИРОВАТЬ: Я играл в Devil's Advocate.

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

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

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

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

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

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

...