Создание веб-сервиса: какие варианты у меня есть? - PullRequest
0 голосов
/ 07 декабря 2010

Я собираюсь создать свой первый веб-сервис и хотел бы, чтобы с самого начала его указывали в правильном направлении.

Вот взаимодействия, которые должны иметь место:

  • Сначала смартфон или компьютер отправит часть данных на мой веб-сервис.
  • Веб-служба сохранит информацию в базе данных.
  • Периодически алгоритм будет обращаться к базе данных и изменять ее.
  • Алгоритм будет периодически связывать данные и отправлять их на смартфоны или компьютер (как?)

Большой вопрос: Каким базовым вещам я должен научиться, чтобы реализовать нечто подобное?


Теперь вот маленькие бессвязные вопросы, которые у меня тоже возникают в голове. Не стесняйтесь ответить на них, если хотите. (... возможно, рассмотрите их дополнительные кредиты?)

  • Я слышал много хорошего об услугах RESTful, я прочитал статью в вики и даже поиграл с веб-сервисом Twitter, который является RESTful. Это очевидный путь? Или я все еще должен рассмотреть что-то еще?
  • Какой язык программирования я использую для сохранения данных в базе данных? Я думаю, что php будет первым выбором для этого.
  • Какой язык программирования я использую для взаимодействия с базой данных? Я думаю, что-нибудь, вероятно, приемлемо, верно?
  • Должен ли я беспокоиться о параллельном доступе к базе данных, или MySQL справится с этим для меня? (Я тоже довольно плохо знаком с базами данных.)
  • Как же я могу отправить информацию обратно? Очевидно, что если это ответ на HTTP-запрос, то это не проблема, но будут моменты, когда ответ может занять довольно много времени для вычисления. Должен ли я просто оставить HTTP-запрос невыполненным, пока не получу ответ?
  • Будут случаи, когда мне нужно будет отправлять информацию на смартфон независимо от того, была ли мне отправлена ​​информация. Как я могу передать информацию своим пользователям?

Другая информация, которая может помочь вам узнать, откуда я:

  • Я довольно хорошо знаком с Java, C #, C ++ и Python. Я играл с PHP, Javascript и Ruby.
  • Я относительно новичок в области баз данных, но я понял основную идею.
  • Я уже настроил свой сервер и использую базовый стек LAMP. Мое понимание L , A , M и P довольно элементарно.

Ответы [ 3 ]

1 голос
/ 07 декабря 2010

Язык : Python для простоты использования, предполагая, что GIL не представляет особой проблемы для ваших требований (например, многопоточность). Он имеет драйверы для большинства баз данных и поддерживает множество протоколов. Для этого есть несколько веб-фреймворков, наиболее популярными из которых являются Django .

.

Протоколы : если вы сосредоточены на HTTP, изучите SOAP и REST . Обратите внимание, что SOAP имеет тенденцию быть многословным, что вызывает проблемы при перемещении объемов данных. С другой стороны, если вы смотрите на другие варианты, изучите программирование сокетов и, возможно, какой-нибудь двоичный формат, такой как буфер протокола Google . Возможна также прошивка (см .: Flash Remoting ). Обратите внимание, что бинарные опционы требуют, чтобы пользователи что-то устанавливали на свой компьютер (например, апплет или автономное приложение).

Ответы : если процесс долго выполняется, и клиент должен быть уведомлен о завершении, я бы порекомендовал разработать приложение для клиента. Браузеры могут быть запрограммированы с помощью JavaScript для периодического опроса, или Flash-ролик может быть встроен в обновления в реальном времени, но это несколько хитрые части программирования браузера. Если вы имеете дело с беспроводными телефонами, посмотрите на SMS. В противном случае я бы просто предоставил клиентам способ получить статус, но не отправлять уведомления (например, push vs. pull). Как писал @jcomea_ictx, AJAX - это вариант, если это решение на основе браузера - изучите jQuery .

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

1 голос
/ 07 декабря 2010

Пожалуйста, ради любви к программированию, не используйте PHP, если вы уже знакомы с Python. Последнее делает код намного чище и удобнее в обслуживании. Не то, чтобы писать хороший код на PHP невозможно, но это относительная редкость. Вы можете использовать Python для всего серверного, включая взаимодействие с MySQL, с модулем MySQLdb. Либо со стандартным CGI, либо с FCGI, либо с mod_python.

Что касается базы данных, использование транзакций устранит конфликты. Но обычно вы можете спроектировать систему таким образом, чтобы не возникало конфликтов. Например, использование автоматически увеличивающихся идентификаторов первичных ключей на каждой вставке обеспечит уникальность каждой записи.

Вы можете «извлекать» данные с помощью Javascript, возможно, с использованием методологии AJAX, или «выдвигать» с помощью SMS или других технологий.

Когда для вычисления ответов требуется некоторое время, вы можете "опросить", используя AJAX. Это очень распространенная техника. Сервер просто возвращает «мы работаем над этим» (или эквивалентный) со встроенным обновлением, пока результаты не будут готовы.

Я не эксперт по REST, но можно сказать, что AJAX, особенно при использовании опроса, а не просто ответа на ввод пользователя, нарушает принципы RESTful. Но вы можете быть пуристом или делать все, что угодно. Это зависит от вас.

Я не верю, что когда-либо использовал какие-либо «push» технологии, кроме SMS, и это было годы назад, когда многие компании имели бесплатные SMS-шлюзы. Поэтому, если вы хотите «подтолкнуть» данные, лучше надеяться, что кто-то еще присоединится к беседе!

0 голосов
/ 08 декабря 2010

Использовать Java. Последняя версия Java EE 6 делает кодирование RESTful и сервисов SOAP быстрым, а также очень легко взаимодействует с базами данных.

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

...