Веб-сервисы - Положи против Поста против Получи - PullRequest
0 голосов
/ 20 июля 2009

В настоящее время я рассматриваю некоторый код для коллег по другому проекту, и они используют веб-сервис WCF ReST.

Меня беспокоит то, что для каждого из их методов был указан только протокол HTTP POST. Это верно независимо от того, отвечает ли фактический метод за получение, обновление или создание записей.

Должны ли веб-службы всегда придерживаться хороших стандартов протокола HTTP для обработки информации? Не должен ли метод, подобный приведенному ниже, иметь метод HTTP «GET» вместо указанного «POST»?

[ServiceContract]
public interface IBranchService
{
    [OperationContract]
    [WebInvoke(
        Method="POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json
        )
    ]
    GridResponse GetBranchesAll(string brandCode, string branchNumber);
...

В архитектуре нет других ограничений, предписывающих использование только POST.

1 Ответ

3 голосов
/ 20 июля 2009

Нет способа ответить на этот вопрос, не зная ограничений, под которыми они разработали API. Например, наш API имеет возможность полностью работать с запросами POST, потому что он должен вызываться Flash, который имеет ошибки с GET (то есть не может отправлять заголовки запроса) и не может отправлять PUT или DELETE. Некоторые библиотеки Javascript имеют аналогичные ограничения.

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

...