Является ли хорошей практикой разработка API при разработке сайта, чтобы сам сайт фактически использовал API? Или есть ли снижение производительности, если вы решите это сделать?
Например, кто-нибудь знает, используют ли зрелые сайты, такие как Facebook или Digg, свой собственный API для CRUD (создание, чтение, обновление, удаление) или у них есть свой собственный бэкенд? Спасибо
Я сомневаюсь, что Facebook и подобные компании используют собственный API. Есть несколько причин не использовать собственный API для самого сайта:
Я считаю хорошей идеей иметь низкоуровневый интерфейс к приложению, который можно использовать без браузера как такового, и что сайт должен использовать этот интерфейс для выполнения своих задач.
Этот интерфейс не обязательно должен быть самим API, это может быть слой более низкого уровня, чем API, и который используется как API, так и рабочим веб-сайтом.
Как правило, это плохая идея, если API просто дублирует веб-сайт.
т. е. следующая плохая
# hypothetical example of bad duplication
def website_update_blog_post(request):
user = request.username()
ensure_logged_in(user)
post = Posts.objects.upsert(request.post_title, request.post_body)
trigger_notifications(post)
.....
def api_update_blog_post(user, password, title, body):
verify_login(user, password)
post = Posts.objects.upsert(title, body)
trigger_notifications(post)
если вы используете некоторые, например. MVC framework в качестве бэкенда, то у вас уже есть какой-то такой CRUD API, или вы можете использовать что-то вроде ORB frameworks, которые направлены в какую-то сферу, например DB, и использовать их API для управления вашим приложением, также это может быть что-либо.
Но я не советую вам использовать чистый SQL, особенно на старте. Итак, скажите мне, какие серверные языки вы предпочитаете, и цели веб-проекта, и сообщество может посоветовать вам несколько новых идей.
Нет, не пишите свои собственные инструменты CRUD или ORMS.Существует достаточно готовых фреймворков, где вся тяжелая работа по созданию API / фреймворков / утилит уже сделана за вас — вы можете просто пожинать плоды производительности, используя их. Они также рассмотрят последствия для производительности. Единственным наказанием является небольшая кривая обучения для каждого.
Тем не менее, вы по-прежнему можете определить стандартный способ/практику использования этих API для обеспечения единообразия (и ремонтопригодности) по мере того, как ваше приложение становится больше и старше.
И если вы хотите дополнительно защитить себя от изменений (или застраховать свои ставки), вы можете абстрагировать сторонние компоненты и платформы с помощью интерфейсов и инверсии зависимостей (например, DI или шаблон локатора сервисов)