Разделение интерфейсных и серверных приложений на одном сервере: лучшие практики и примеры кода

Разделение клиентских и серверных приложений — обычная практика в современной веб-разработке. Это позволяет улучшить организацию кода, масштабируемость и обслуживание. Один из популярных подходов — использовать префикс «/api/», чтобы различать внешние и внутренние маршруты на одном сервере. В этой статье мы рассмотрим различные методы достижения такого разделения, а также приведем примеры кода.

Метод 1: маршрутизация с использованием обратного прокси
Один из способов разделения интерфейсных и внутренних приложений — использование обратного прокси-сервера. Обратный прокси-сервер может маршрутизировать запросы, содержащие префикс «/api/», во внутреннее приложение, перенаправляя при этом другие запросы во внешнее приложение. Вот пример использования Nginx в качестве обратного прокси-сервера:

server {
  listen 80;
  server_name example.com;
  location /api/ {
    proxy_pass http://backend-server;
  }
  location / {
    proxy_pass http://frontend-server;
  }
}

Метод 2: префикс URL-адресов во внутренних платформах
Многие серверные платформы позволяют определять префиксы URL-адресов для ваших маршрутов. Указав «/api/» в качестве префикса, вы можете отделить маршруты API от внешних маршрутов. Вот пример использования Node.js и Express:

const express = require('express');
const app = express();
// Front-end routes
app.get('/', (req, res) => {
  // Handle front-end request
});
// API routes
app.get('/api/users', (req, res) => {
  // Handle API request
});
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

Метод 3: виртуальные хосты
Другой подход заключается в использовании виртуальных хостов для разделения клиентских и серверных приложений. Каждое приложение может быть размещено в отдельном субдомене или домене, что обеспечивает четкое разделение. Вот пример использования директивы VirtualHost Apache:

<VirtualHost *:80>
  ServerName frontend.example.com
  DocumentRoot /var/www/frontend
  # Additional configuration for the front-end application
</VirtualHost>
<VirtualHost *:80>
  ServerName api.example.com
  DocumentRoot /var/www/backend
  # Additional configuration for the back-end application
</VirtualHost>

Разделение интерфейсных и серверных приложений с помощью префикса «/api/» на одном сервере дает несколько преимуществ, включая улучшенную организацию кода и масштабируемость. В этой статье мы рассмотрели три метода достижения такого разделения: маршрутизация с обратным прокси-сервером, префикс URL-адресов во внутренних платформах и виртуальные хосты. Следуя этим рекомендациям, вы сможете повысить удобство обслуживания и производительность своих приложений.