Я пишу клиент-серверные приложения для Winforms уже около шести лет, но мне еще предстоит углубиться в веб-пространство (ни ASP.NET, ни веб-сервисы). Учитывая направление, в котором рынок труда движется в течение некоторого времени, и тот факт, что у меня есть основное любопытство, я хотел бы заняться написанием веб-сервисов, но я не знаю, с чего начать.
Я читал о различных вариантах (XML / SOAP против JSON, REST против ... ну, на самом деле я не знаю, как это называется и т. Д.), Но я не уверен, какие критерии в игре при принятии решения использовать один или другой. Очевидно, что я хотел бы использовать имеющиеся у меня инструменты (Visual Studio, .NET Framework и т. Д.), Не ограничивая себя только ориентацией на определенную аудиторию (т. Е. Написание службы таким образом, чтобы ее было трудно использовать). например, из клиента Windows Mobile / Android / iPhone).
Для протокола, на данный момент я планирую использовать WCF для разработки веб-сервисов, но я открыт для использования другого подхода .NET, если это целесообразно.
Я понимаю, что этот вопрос довольно открытый, поэтому он может быть закрыт, но вот некоторые вещи, которые меня интересуют:
- Что нужно учитывать при выборе типа веб-службы (REST и т. Д.), Которую я намереваюсь написать? Можно ли (и если это возможно) перейти от одного подхода к другому?
- Могут ли веб-службы быть написаны на основе событий? Как я уже сказал, я разработчик Winforms, поэтому я привык к объектам, вызывающим события, на которые я реагировал. Например, если у меня есть два клиента, подключенных к моему сервису, есть ли способ для меня «передать» информацию одному из них в результате действия другого? Если это возможно возможно, это целесообразно или я просто не думаю об этом правильно?
- Какие механизмы аутентификации лучше всего работают для общедоступных служб? А что, если я планирую подключать к сервису разные типы ОС и клиентов? Существует ли общепринятый платформо-независимый подход?
- В строке аутентификации это то, что я должен делать сам (аутентификация управляющих сеансов и т. Д.) Или это что-то должно обрабатываться на уровне платформы, и я просто определяю, как именно это должно работать? Если это так, как я могу сказать, кто запрашивающий аутентифицировал себя как?
Я начал писать механизм аутентификации (простые комбинации имени пользователя и пароля, хранящиеся в базе данных, и соответствующую таблицу сеансов с ключом GUID) внутри моей службы и просто требовал, чтобы этот ключ передавался при каждой операции (кроме входа в систему, конечно), но я хочу убедиться, что я не изобретаю колесо здесь. Однако я также не хочу загромождать сервер кучей учетных записей пользователей компьютеров только для использования обычной аутентификации. У меня также сложилось впечатление, что для дайджест-аутентификации (и, конечно, Windows) требуется учетная запись пользователя компьютера (или AD).