Совет, чтобы упростить работу с несколькими средами.
В моей повседневной работе мне посчастливилось работать с действительно отличным набором людей, которые делают отличную работу, упрощая использование API. Для нашего приложения у нас есть конечные точки разработки и производства, и мы переключаемся между ними по мере работы над каждым новым выпуском.
Итак, у меня есть несколько целей при переключении между конечными точками api:
- Делай проще. Это не должно быть сложным или трудоемким.
- Устраните как можно больше способов сделать опечатки.
- Сделайте так, чтобы при наличии нескольких различных служб API (распознавание изображений, база данных, платежное решение) мы могли переключаться между всеми ними одновременно.
- Сделайте место, где происходит переключение, как можно более читабельным для других, смотрящих на код.
Итак, как разработчик, мне нравится быть максимально СУХИМ, и моей целью было попытаться достичь всех четырех целей. Я нашел способ сделать это полезным, и, возможно, вы найдете это полезным. (Кроме того, если у вас есть идея, как лучше или иначе, поделитесь, пожалуйста!)
Во-первых, я начну с создания нового перечисления EnvironmentType
. Во многих случаях это может быть так просто:
Если ваша команда использует больше конечных точек, чем это, или у вас есть другие варианты, или вы хотите иметь возможность переключаться между разными версиями, очевидно, не стесняйтесь настраивать его по мере необходимости. (Это может быть что-то вроде developmentV1, developmentV2, productionV1
для разных случаев, если вам это нужно.)
После его создания я создаю класс для управления средой. Это довольно просто и понятно.
Я сделал здесь несколько вариантов. Позвольте мне пройти через них.
- Я сделал среду
current
неявно развернутой. Это необходимо, чтобы убедиться, что функция настройки ДОЛЖНА быть вызвана перед использованием класса. Если он не вызывается, приложение вылетает при запуске. - Я создал функцию
configure
для установки текущей переменной среды.
Итак, у нас есть несколько настроек, теперь давайте поговорим немного о том, как настроить класс, отвечающий за выполнение ваших веб-вызовов. Вот схема, которую я использую, чтобы убедиться, что в ней используется верная информация:
Итак, теперь мы настроили наш api так, чтобы мы могли написать только одну переменную baseUrlString
и использовать ее как часть всех наших различных URL-адресов в нашем классе api. С этого момента мы просто настроим все различные веб-вызовы на использование одной и той же строки api.
Я уверен, что у всех нас есть свои любимые способы создания и использования самого API (и это выходит за рамки данной статьи).
Хорошо, теперь последний кусок, который заставляет все работать.
- Давайте добавим переменную для хранения текущей среды в делегате приложения, чтобы она оставалась доступной для приложения (чтобы она оставалась в области видимости на протяжении всего приложения).
- Вызовите функцию
Environment.configure
, чтобы установить текущую среду.
Хорошо, теперь, когда все сделано, наше приложение и наш api будут использовать правильные пути для среды разработки.
Итак, вот что мне нравится в этом способе работы.
- Настроить это в первый раз несложно.
- Обе конечные точки уже находятся в классе (ах) сетевого API, поэтому после того, как вы добавите их и убедитесь, что нет опечаток, вам не нужно их изменять (если, конечно, не изменятся фактические URL-адреса конечных точек).
- Переключение с
.production
на.environment
- это только 1 значение, и это значение проверяется во время компиляции. - Если у вас есть несколько разных конечных точек API как часть вашего приложения, это изменяет их все за один вызов. (Допустим, у вас есть API, предоставляющий ваши пользовательские данные, что-то вроде внутренней связи для обслуживания клиентов и что-то, что управляет вашими платежами.) Вы меняете это в одном месте, и он меняет это для всех.
- Вы используете только одну переменную
baseUrlString
для создания всех ваших URL-адресов в вашем классе API, поэтому вы минимизируете количество опечаток и повторений.
Итак, я нашел это полезным для себя. Что вы думаете?