Частина 1: Огляд основ та початковий код для застосунку API на Sinatra
Фреймворк Ruby Sinatra
Щоб продемонструвати цю тему, я створю невелику бекенд-систему інвентаризації, яка зберігає та організовує продукти. Перед тим, як заглибитися в основну тему, краще переглянути визначення технологій, які я використаю для створення цього API.
Що таке Sinatra?
Sinatra — це предметно-орієнтована мова (Domain Specific Language), реалізована на Ruby, яка використовується для створення простих та динамічних веб-застосунків. По суті, Sinatra — це набір попередньо створених методів, які ми можемо включити в застосунок, щоб перетворити його на веб-застосунок Ruby. Sinatra — чудовий спосіб розпочати розробку веб-застосунків на Ruby і підготуватися до вивчення інших більших фреймворків, зокрема Rails.
Що таке Active Record ORM?
Active Record (AR) — це ORM (об’єктно-реляційне відображення), яке відповідає за представлення бізнес-даних і логіки. Іншими словами, AR спрощує створення та використання бізнес-об’єктів, дані яких потребують постійного зберігання в базі даних.
Active Record надає кілька механізмів, найважливішими з яких є:
- Представлення моделей та їхніх даних.
- Відображення зв’язків між цими моделями.
- Представлення ієрархій наслідування через пов’язані моделі.
- Валідація моделей перед їх збереженням у базі даних.
- Виконання операцій з базою даних у стилі об’єктно-орієнтованого програмування.
Проектування моделей
Тепер настав час почати створення API на Sinatra з використанням Active Record. У цьому прикладі я створю систему інвентаризації, яка має три моделі: Product, Category та Supplier.
Product-Category: Зв’язок між Product і Category — це зв’язок "багато-до-багатьох". Продукт має багато категорій, а категорія має багато продуктів. Таблиця зв’язків Collection відповідає за доступність між цими двома моделями.
Product-Supplier: Зв’язок між Product і Supplier також "багато-до-багатьох". Продукт має багато постачальників, а постачальник має багато продуктів. Таблиця зв’язків Purchase відповідає за доступність між цими двома моделями.
ERD-діаграма моделей
ERD-діаграма
Структура застосунку на Sinatra
Я припускаю, що ви вже знаєте та встановили всі залежності Ruby та Sinatra. Після цього ваша структура застосунку може виглядати так:
Початкові файли застосунку на Sinatra
app/models
: Моделі Active Record. Відповідають за код, який отримує та оновлює дані в базі даних за допомогою класів, які наслідуютьActiveRecord::Base
.app/controllers
: Відповідають за обробку запитів та використання моделі для створення даних, потрібних для відображення.config
: Код у цій папці відповідає за налаштування середовища, як-от підключення файлів/гемів і встановлення з’єднання з базою даних.db/migrate
: Міграції Active Record. Відповідають за створення та зміну структури бази даних (створення нових таблиць, додавання стовпців до існуючих тощо).db/seed.rb
: Дозволяє легко додати тестові дані до бази даних.spec
: Тести RSpec.Gemfile
: Містить список усіх гемів, від яких залежить наш застосунок.Rakefile
: Код для поширених завдань, які можна легко виконувати з командного рядка, як-отrake console
.
Готовий початковий код:
Я створив репозиторій на GitHub для бекенду застосунку API на Sinatra. Ви можете форкнути і клонувати або завантажити його для ознайомлення.
Після клонування або завантаження виконайте команди:
bundle install
Команда вище встановить усі необхідні залежності для вашого застосунку.
Ви тепер можете почати створювати свій проєкт.
Будь ласка, перейдіть до Частини 2 Створення міграцій та таблиць, щоб створити бекенд-застосунок API на Sinatra.
Перекладено з: Building Sinatra API Back-end with Active Record/Ruby Part 1