Asp.Net Web Api: обработка двух запросов get с одинаковой подписью - PullRequest
0 голосов
/ 27 февраля 2019

Текущая ситуация

    [HttpGet]
    public HttpResponseMessage CheckProfileStatus(int id)
    {
        //check profile status from third party
        return //profile status and HttpStatus;
    }

    [HttpGet]
    public HttpResponseMessage ProcessTheProfile(int profileId)
    {
        //check profile status from third party again, if status is "Good", do something
        return //someMessage and HttpStatus;
    }

URL для вызова CheckProfileStatus метод

myUrl/api/Profile/123

URL для вызова ProcessTheProfile метод

myUrl/api/Profile/?profileId=123

Я надеюсь, что комментарии в коде проясняют ситуацию.

Мне не очень нравится тот факт, что у меня есть два HttpGet метода с одинаковой сигнатурой в одном контроллере (хотя это работает).

Я не знаю, является ли это наилучшей практикой.

Вопрос:

Должен ли я извлечь эти два метода в два отдельных контроллера, полностью ли этохорошо иметь два метода HttpGet с одинаковой сигнатурой в одном контроллере или есть лучший способ справиться с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

По моему мнению, этот подход вызовет проблемы, если ваш проект станет больше, так как его использование запутано.

Я бы предложил использовать подход RESTful.

Возможно, эта статья поможет вам немного понять.

https://medium.com/@schneidenbach/restful-api-best-practices-and-common-pitfalls-7a83ba3763b5

0 голосов
/ 27 февраля 2019

Во-первых, это сбивает с толку любого клиента API.

У вас есть 2 метода GET, которые практически идентичны.На самом деле большинство людей предпочитают добавить маршрут, охватывающий ваш первый вариант, который в основном устанавливает значение profileId после косой черты.

Во-вторых, ожидается, что когда вы запускаете GET для объекта с идентификатором,Вы получаете представление этой сущности.Это не то, что здесь происходит.

Вам нужно решить, какой тип API вы хотите.Общий, где такие вещи хороши:

myUrl/api/profile/process/123 или process/profile, или что-то еще, что имеет смысл для API.

Если ваш API должен быть RESTful (что в основном означает, что у вас будет один метод на HTTP-глагол и ничего более), затем вам нужно добавить новый контроллер для ProcessProfile , и тогда ваш URL может выглядеть следующим образом:

myUrl/api/ProcessProfile/123

Ни один из этих параметров не установлен в камне, это просто варианты.Комментарии к ветке OP также дают несколько хороших вариантов, которые следует учитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...