Надання можливостей розробникам з GCP: безперебійне управління API для досягнення ваших цілей!
У сучасній розробці програмного забезпечення проєктування надійного та масштабованого API — лише половина справи. Важливою частиною є також розгортання цього API для користувачів і забезпечення безперебійної взаємодії з базами даних. Ось де на допомогу приходять Google Cloud Platform (GCP) та MongoDB!
У цій статті ми розглянемо, як крок за кроком реалізувати API на Go, яке взаємодіє з MongoDB на GCP. Від підключень до бази даних до процесів розгортання — ви отримаєте повне розуміння ефективного і потужного управління API. Готові дослідити цю потужну комбінацію? Тоді почнемо!
A. Створення та розробка вашого API-проєкту на Go
1- Якщо Go ще не встановлено на вашому комп’ютері, спочатку завантажте та встановіть останню версію Go. Потім, якщо у вас ще немає папки з назвою projects, створіть таку папку. Тепер створіть ваш Go-проєкт у папці projects, виконавши наступні команди.
cd projects
mkdir example_api && cd example_api
go mod init example_api
Результати будуть виглядати так:
2- Відкрийте створену папку проєкту в IDE, яку ви використовуєте. Я рекомендую VS Code. Створіть структуру папок і файлів, як на зображенні нижче.
Джерело коду цього проєкту доступне в моєму GitHub репозиторії:
https://github.com/enescerrahoglu/example_api
B. Створення проєкту MongoDB
Увійдіть в MongoDB Console.
1- Створіть проєкт. Потім створіть кластер. Ви можете вибрати потрібні налаштування при створенні кластера.
2- Після процесу створення розгортання ви побачите значення імені користувача та пароля для користувача бази даних у розділі Connect to [Created Cluster]. Натисніть кнопку Create Database User. Після створення користувача бази даних перейдіть до наступного етапу, натиснувши кнопку Choose a connection method.
3- На другому етапі виберіть опцію Drivers під заголовком Connect to your application.
4- На третьому етапі Connect, переконайтеся, що вибрано драйвер Go. Відкрийте термінал і встановіть драйвери, перебуваючи у директорії проєкту.
go get go.mongodb.org/mongo-driver/mongo
Скопіюйте рядок підключення, вказаний на етапі 3. Переконайтеся, що ваш пароль є в connection string. Якщо Show Password вимкнено, увімкніть цей перемикач.
5- Вставте connection string, який ви скопіювали, для ключа MONGO_URI у файл .env проєкту та збережіть файл.
Потім завершіть процес у MongoDB Console.
6- Створіть базу даних і колекцію з назвою users для кластера, який ви створили.
Альтернативно, ви можете створити власне API.
Ось як налаштувати базову синхронізацію:
Backend API
- Використовуйте Node.js та Express для створення простого API.
- Встановіть MongoDB і підключіть його до сервера.
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json());
// Підключення до MongoDB
mongoose.connect('mongodb://localhost:27017/offlineFirstDB', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// Схема і модель
const TaskSchema = new mongoose.Schema({
name: String,
is_completed: Boolean,
created_at: Date,
updated_at: Date,
});
const Task = mongoose.model('Task', TaskSchema);
// Утиліта: Отримати записи, оновлені з певного часу
app.get('/tasks', async (req, res) => {
const lastPulledAt = new Date(parseInt(req.query.lastPulledAt || '0', 10));
const tasks = await Task.find({ updated_at: { $gt: lastPulledAt } });
res.json({ tasks, timestamp: Date.now() });
});
// Утиліта: Застосувати вхідні зміни
app.post('/tasks', async (req, res) => {
const changes = req.body;
// Обробити додані або оновлені завдання
if (changes.created) {
for (const task of changes.created) {
await Task.updateOne(
{ _id: task.id },
{
$set: {
name: task.name,
is_completed: task.is_completed,
created_at: task.created_at,
updated_at: new Date(),
},
},
{ upsert: true } // Додати, якщо не існує
);
}
}
// Обробити видалені завдання
if (changes.deleted) {
for (const id of changes.deleted) {
await Task.deleteOne({ _id: id });
}
}
res.status(200).send('Зміни синхронізовано успішно');
});
// Запустити сервер
app.listen(3000, () => console.log('Сервер працює на порту 3000'));
Викликайте цю функцію під час запуску додатка або за певною дією користувача:
import { database } from './database';
import { syncDatabase } from './sync';
useEffect(() => {
syncDatabase(database);
}, []);
Тестування додатка
- Запустіть сервер backend:
node server.js
- Запустіть додаток React Native:
npx react-native run-android
абоnpx react-native run-ios
. - Створюйте, оновлюйте та видаляйте завдання в офлайн-режимі, потім підключіться до інтернету, щоб побачити синхронізацію в дії.
Висновок
Реалізація архітектури "offline-first" з WatermelonDB і MongoDB забезпечує надійне рішення для додатків, що потребують високої продуктивності та безперебійної роботи в офлайн-режимі. Поєднуючи можливості локальної бази даних WatermelonDB з потужним бекендом MongoDB, ви можете створювати додатки, що забезпечують надійний користувацький досвід, навіть у складних умовах мережі.
Чи було це корисно?
Якщо ця стаття була корисною, будь ласка, знайдіть час, щоб прочитати деякі з моїх попередніх статей. Ваша підтримка та аплодисменти заохочують мене створювати ще більше корисного контенту, як цей. Дякую, що прочитали!
Репозиторій GitHub : https://github.com/vineetkrdixit/offlineSync
Перекладено з: Offline-First Architecture with WatermelonDB and MongoDB