Клиент к волшебному АПИ пожрали мозгошмыги. Репаро не помогает, вам нужно воскресить утерянное руками.
- Для начала восстановим модели и сам клиент. В
IWizardClientуказаны базовый адрес АПИ и нужные методы. Постучитесь в АПИ с помощьюPostmanилиInsomnia, чтобы узнать, как выглядят данные, и имплементируйте методы вWizardClient. Парочку моделей фантастические твари оставили невредимыми, какие-то методы сохранились в интерфейсе, но это нам не очень поможет. Пока не будем обращать внимания на сложность эликсиров и проигнорируем полеDifficulty. Также следует придерживаться Статута о Секретности и не злоупотреблять использованием единственногоPostметода. - После того, как вернём доступ до данных, попробуем реализовать методы в
WizardService. В нём описано, что именно нужно сделать и посчитать. Вам могут пригодиться ваши знанияLINQ. Можно проверить с помощьюWizardServiceTests. Закоменченные тесты пока не трогайте. - Попробуйте перейти по адресу. Это документация нужного нам АПИ, в формате
swagger. Такая документация может генерироваться автоматически, что упрощает интеграцию с разными апишками. В этомjsonфайле указаны все методы и модели АПИ. А значит мы можем наконец вспомнить про сложность эликсиров: попробуйте разобраться с форматом документации и найти в ней все возможные форматы дляenum ElixirDifficultyи внести сложность в модель эликсира. - Пакет
Swashbuckleможет не только сгенерировать документацию вашего АПИ автоматически, но и запускатьSwagger UI, для этого АПИ по адресу. На этой странице не только лежит вся информация в человекопонятном виде, на самом деле, запросы можно отправлять прямо с неё, чтобы понять, как работает конкретный метод и что он вернёт. Попробуйте, например, получить информацию о факультетах (Houses). - Дальше задания со звёздочкой. А что будет, если запросить у вашего клиента ингредиент с идентификатором, например,
ingredient? Или волшебника с идентификаторомde736ba2-3a67-4bce-b451-f40bac39fd03? А что возвращает сам АПИ на такие запросы? Поймите формат ошибок, восстановите модельClientError. Посмотрите на классClientResult. Он может хранитьStatusCodeзапроса и ответ или ошибку запроса. Попробуйте возвращать из клиента не конкретные модели, а обёртку над ними -ClientResult<TResponse>. Это значит, что программист, который вызывает метод вашего клиента, сможет понять, был ли запрос успешным или нет, и предпринять что-то в зависимости от результата. Т.е. можно удостовериться, что запрос удался с помощьюEnsureSuccess, чтобы выбросить исключение, если что-то пошло не так. Или же уточнить, успешен ли запрос с помощьюIsSuccessfulи, например, пропустить неуспешный запрос, никак не обрабатывая его результат. - Вернёмся к закоменченным тестам. Нужно изменить
WizardService. МетодCountIngredientUsagesAsyncдолжен бросать исключение с сообщением, в котором должен бытьtitleиз возвращённой АПИ ошибки, если с поиском ингредиента что-то пошло не так. Оставшиеся два метода должны возвращать0, если где-то что-то не нашлось.