Що таке raps-mock?
raps-mock — це комплексний mock-сервер для API Autodesk Platform Services (APS). Він автоматично генерує маршрути з OpenAPI 3.0 специфікацій і може працювати у режимі stateless (фіксовані відповіді) або stateful (зберігання у пам’яті).
Побудований на Rust для надійності та продуктивності, raps-mock можна використовувати як окремий сервер або як бібліотеку у ваших Rust-проєктах.
Навіщо raps-mock?
Проблема: Розробка з використанням live APS API вимагає дійсних облікових даних, витрачає токени на операції Model Derivative та забруднює тестовими даними ваше ACC-середовище. Проблеми з мережею можуть зірвати сесію розробки. CI/CD пайплайни стають нестабільними, коли залежать від зовнішніх сервісів.
Рішення: raps-mock надає повнофункціональний mock-сервер APS, який працює локально або у вашому CI-середовищі. Тестуйте інтеграції без облікових даних, без витрат, без мережевих залежностей.
Випадки використання
- Локальна розробка — Працюйте офлайн, ітеруйте швидко, без налаштування облікових даних для нових членів команди
- CI/CD тестування — Надійні, детерміновані тести, що не залежать від зовнішніх сервісів
- Демо-середовища — Демонструйте можливості APS без реальних даних чи облікових даних
- Навчання — Експериментуйте з APS API без наслідків
Ключові можливості
- Автоматично згенеровані маршрути з OpenAPI 3.0 специфікацій
- Налаштовувані режими: Stateless (фіксовані відповіді) або Stateful (зберігання у пам’яті)
- Бібліотека та CLI: Використовуйте як бібліотеку або окремий сервер
- Повне покриття APS: Authentication, OSS, Data Management, Model Derivative, Construction, Webhooks
- Користувацькі обробники: Розширюйте за допомогою власних обробників ендпоінтів
- Типобезпечний: Побудований на Rust для надійності та продуктивності
Швидкий старт
Як окремий сервер
# Start the mock server (stateful mode by default)
raps-mock --port 3000
# Start in stateless mode (fixed OpenAPI example responses)
raps-mock --port 3000 --mode stateless
# With custom OpenAPI directory
raps-mock --openapi-dir ./my-openapi-specs --port 3000
Як бібліотека
use raps_mock::{'{'}MockServer, MockServerConfig, MockMode{'}'};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {'{'}
let config = MockServerConfig {'{'}
mode: MockMode::Stateful,
openapi_dir: "../aps-sdk-openapi".into(),
..Default::default()
{'}'};
let server = MockServer::new(config).await?;
server.start("0.0.0.0:3000").await?;
Ok(())
{'}'}
В інтеграційних тестах
use raps_mock::testing::TestServer;
#[tokio::test]
async fn test_bucket_creation() {'{'}
// Start mock server on random port
let server = TestServer::start_default().await.unwrap();
// Use any HTTP client against server.url
let client = reqwest::Client::new();
let response = client
.post(&format!("{'{}'}/oss/v2/buckets", server.url))
.json(&serde_json::json!({'{'}
"bucketKey": "test-bucket",
"policyKey": "transient"
{'}'}))
.send()
.await
.unwrap();
assert!(response.status().is_success());
{'}'}
Конфігурація
Параметри командного рядка
| Параметр | Скорочення | За замовчуванням | Опис |
|---|---|---|---|
--port | -p | 3000 | Порт сервера |
--host | -H | 0.0.0.0 | Хост сервера |
--mode | -m | stateful | stateless або stateful |
--openapi-dir | ../aps-sdk-openapi | Шлях до OpenAPI специфікацій | |
--state-file | - | Шлях до файлу збереження стану | |
--verbose | -v | false | Увімкнути детальне логування |
Пояснення режимів
Режим Stateful (за замовчуванням)
У режимі stateful mock-сервер підтримує стан у пам’яті. Операції мають побічні ефекти:
- Створення бакету додає його до списку
- Завантаження об’єкта асоціює його з бакетом
- Запуск трансляції створює завдання зі статусом, який можна запитати
- Видалення ресурсів прибирає їх зі стану
Цей режим ідеальний для тестування робочих процесів, що охоплюють кілька API-викликів.
Режим Stateless
У режимі stateless кожен запит повертає фіксовані відповіді на основі прикладів з OpenAPI специфікації. Стан між запитами не зберігається.
Цей режим корисний для:
- Простого контрактного тестування
- Валідації форматів запитів/відповідей
- Сценаріїв, де збереження стану не потрібне
Підтримувані API
| API | Версія | Статус | Примітки |
|---|---|---|---|
| Authentication | v2 | Повний | Симуляція 2-legged та 3-legged OAuth |
| OSS (Buckets) | v2 | Повний | Створення, перелік, видалення бакетів |
| OSS (Objects) | v2 | Повний | Метадані завантаження, перелік, підписані URL |
| Data Management | v1 | Повний | Хаби, проєкти, папки, елементи |
| Model Derivative | v2 | Повний | Завдання трансляції, маніфести, статус |
| Construction Issues | v1 | Повний | CRUD для зауважень, коментарі |
| ACC Account Admin | v1 | Частковий | Базові операції з обліковими записами |
| Webhooks | v1 | Повний | Управління підписками |
| ACC Submittals | v1 | Заплановано | Фаза 1 |
| ACC Checklists | v1 | Заплановано | Фаза 1 |
| ACC RFIs | v1 | Заплановано | Фаза 1 |
| ACC Assets | v1 | Заплановано | Фаза 1 |
| Design Automation | v3 | Заплановано | Фаза 4 |
| Reality Capture | v1 | Заплановано | Фаза 4 |
Інтеграція з RAPS CLI
raps-mock розроблений для безшовної роботи з RAPS CLI:
# Terminal 1: Start mock server
raps-mock --port 3000
# Terminal 2: Configure raps to use mock server
export APS_BASE_URL=http://localhost:3000
export APS_CLIENT_ID=mock-client
export APS_CLIENT_SECRET=mock-secret
# Now raps commands work against the mock
raps auth test
raps bucket create --key test-bucket --policy transient
raps bucket list
Дорожня карта
- Фаза 1 (v0.3.0): Повне покриття модулів ACC (Submittals, Checklists, RFIs, Assets)
- Фаза 2 (v0.4.0): Збереження стану та фікстури
- Фаза 3 (v0.5.0): Можливості симуляції (затримка, помилки, прогрес)
- Фаза 4 (v0.6.0): Design Automation та Reality Capture
- Фаза 5 (v0.7.0): Досвід розробника (запис, дашборд, валідація)
- Фаза 6 (v1.0.0): Docker, GitHub Actions, продакшн-реліз