Должен ли API быть модулем в моем python проекте или новом проекте? - PullRequest
0 голосов
/ 24 февраля 2020

У нас есть python веб-приложение, с которым взаимодействуют клиенты, и это веб-приложение напрямую взаимодействует с базой данных. Теперь у нас есть необходимость в разработке API, который продавцы будут использовать для получения и публикации данных в нашей базе данных и из нее в JSON. Должны ли мы создавать API как часть веб-приложения, то есть каждый запрос будет проходить через наше python веб-приложение и затем взаимодействовать с базой данных, или он должен быть отделен? Дополнительные соображения включают в себя масштабируемость и тот факт, что в будущем мы, вероятно, захотим разработать мобильное приложение или другие службы, которые также должны будут взаимодействовать с базой данных. Таким образом, мы рассматривали возможность создания API как единственную точку взаимодействия с базой данных. Тем не менее, мы серьезно занимаемся разработкой веб-приложения flask, и изменить его будет означать огромную задержку в нашем графике, и мы просто хотели оценить преимущества и недостатки обоих решений. Эти две схемы суммируют варианты, которые мы рассматриваем:

Вариант 1:

Option 1

Вариант 2:

Option 2

1 Ответ

1 голос
/ 27 февраля 2020

Как вы сказали, оба варианта имеют свои преимущества и недостатки.

Опция 1 дает вам Разделение проблем . Логика c для взаимодействия с вашей базой данных абстрагируется от одного сервиса. Изменения типа используемой базы данных или используемой схемы требуют только изменения кода для одной службы. Например, скажем, ваша платформа расширилась, и вы теперь можете sh кэшировать вызовы в вашей базе данных. Если у вас есть API, веб-приложение и мобильное приложение, напрямую связывающиеся с базой данных, все они должны быть обновлены, чтобы использовать преимущества кэша. Эти изменения, вероятно, также должны быть организованы для одновременного развертывания. В действительности это будет связано с простоем: чаще всего вы видите это как «плановое обслуживание». Однако вариант 1 нарушает принцип единой ответственности . Служба должна делать одну вещь и делать это хорошо. В варианте 1 служба отвечает как за интерфейс к базе данных, так и за отображение HTML для веб-приложения. Изменения в веб-приложении требуют повторного развертывания службы для API, даже если они не связаны между собой.

Преимущества и недостатки варианта 2 в основном являются противоположностями преимуществ и недостатков варианта 1. Несколько службы, совместно использующие базу данных, могут привести к несогласованности данных, тесной связи (особенно в развертывании) и усложнению отладки.

Распространенный шаблон проектирования (который я бы порекомендовал) представляет собой небольшую модификацию варианта 1 API находится перед базой данных. Это единственный сервис, который взаимодействует с базой данных. Эта настройка должна улучшить вашу масштабируемость. Легко развернуть дубликаты API, а затем запросить балансировку нагрузки между ними. Кроме того, кэширование поиска в базе данных или полное изменение технологии базы данных является (относительно) простой задачей. Ваше веб-приложение или любые другие службы, которые вы разработаете в будущем, взаимодействуют с API, а не с базой данных. Здесь вы можете воспользоваться преимуществами единой ответственности. Стоит отметить, что при таком дизайне каждый запрос вашего веб-приложения будет go через две службы. Тем не менее, преимущества этого проекта, возможно, перевешивают несколько дополнительных миллисекунд задержки.

И последнее: спасибо за мысли о масштабируемости на столь раннем этапе. Вы можете нанести удар прямо сейчас, если ваш график задерживается, но я думаю, что в долгосрочной перспективе вам будет лучше.

...