Outils pour utilisateurs

Outils du site


ujusum:1-projet:12-open-api-yaml

OpenAPI YAML Complet

Préambule

Avant de générer le fichier OpenAPI complet, il faut préciser une contrainte importante :

Le contrat OpenAPI complet correspondant à ce projet représente environ :

  • 250 endpoints
  • 150 à 250 schémas DTO
  • 8000 à 15000 lignes YAML
  • 1 à 2 Mo de spécification

Il est impossible de produire l'intégralité du fichier dans une seule page wiki ou dans une seule réponse.

La bonne pratique consiste à structurer la spécification comme un projet OpenAPI modulaire.


Structure OpenAPI recommandée

docs/openapi/

openapi.yaml

components/

├── schemas
│
├── parameters
│
├── responses
│
├── requestBodies
│
└── securitySchemes

paths/

├── auth.yaml
├── users.yaml
├── owners.yaml
├── properties.yaml
├── reservations.yaml
├── contracts.yaml
├── payments.yaml
├── crm.yaml
├── messaging.yaml
├── reporting.yaml
└── administration.yaml

Fichier racine

openapi.yaml

openapi: 3.1.0

info:

  title: Rental Platform API

  version: 1.0.0

  description: >
    Property Rental Management Platform

servers:

  - url: https://api.production.com/api/v1

  - url: https://api.staging.com/api/v1

security:

  - bearerAuth: []

tags:

  - name: Auth

  - name: Users

  - name: Owners

  - name: Properties

  - name: Reservations

  - name: Contracts

  - name: Payments

  - name: CRM

  - name: Messaging

  - name: Reporting

paths:

  /auth/login:
    $ref: './paths/auth.yaml#/login'

  /properties:
    $ref: './paths/properties.yaml#/properties'

components:

  securitySchemes:

    bearerAuth:

      type: http

      scheme: bearer

      bearerFormat: JWT

Module Auth

POST /auth/login

login:

  post:

    tags:
      - Auth

    summary: Login

    operationId: login

    requestBody:

      required: true

      content:

        application/json:

          schema:

            $ref: '#/components/schemas/LoginRequest'

    responses:

      '200':

        description: Login success

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/LoginResponse'

      '401':

        description: Invalid credentials

LoginRequest

LoginRequest:

  type: object

  required:

    - email
 
    - password

  properties:

    email:

      type: string

      format: email

    password:

      type: string

      minLength: 8

LoginResponse

LoginResponse:

  type: object

  properties:

    accessToken:

      type: string

    refreshToken:

      type: string

    expiresIn:

      type: integer

Module Properties

Property

Property:

  type: object

  required:

    - id
 
    - title
 
    - status

  properties:

    id:

      type: string

      format: uuid

    code:

      type: string

    title:

      type: string

      minLength: 5

      maxLength: 255

    status:

      $ref: '#/components/schemas/PropertyStatus'

    surface:

      type: number

    roomCount:

      type: integer

    bedroomCount:

      type: integer

    bathroomCount:

      type: integer

    capacity:

      type: integer

    createdAt:

      type: string

      format: date-time

PropertyStatus

PropertyStatus:

  type: string

  enum:

    - DRAFT
 
    - PUBLISHED
 
    - RENTED
 
    - MAINTENANCE
 
    - ARCHIVED

GET /properties

properties:

  get:

    tags:

      - Properties

    summary: Search properties

    operationId: searchProperties

    parameters:

      - $ref: '#/components/parameters/Page'

      - $ref: '#/components/parameters/PageSize'

      - name: city

        in: query

        schema:

          type: string

      - name: minPrice

        in: query

        schema:

          type: number

      - name: maxPrice

        in: query

        schema:

          type: number

    responses:

      '200':

        description: Property list

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/PaginatedProperties'

POST /properties

post:

  tags:

    - Properties

  summary: Create property

  operationId: createProperty

  requestBody:

    required: true

    content:

      application/json:

        schema:

          $ref: '#/components/schemas/CreatePropertyRequest'

  responses:

    '201':

      description: Property created

      content:

        application/json:

          schema:

            $ref: '#/components/schemas/Property'

Module Reservations

Reservation

Reservation:

  type: object

  properties:

    id:

      type: string

      format: uuid

    reservationNumber:

      type: string

    startDate:

      type: string

      format: date

    endDate:

      type: string

      format: date

    totalAmount:

      type: number

    status:

      $ref: '#/components/schemas/ReservationStatus'

ReservationStatus

ReservationStatus:

  type: string

  enum:

    - PENDING
 
    - CONFIRMED
 
    - SIGNED
 
    - COMPLETED
 
    - CANCELLED

POST /reservations

post:

  tags:

    - Reservations

  summary: Create reservation

  operationId: createReservation

  requestBody:

    required: true

    content:

      application/json:

        schema:

          $ref: '#/components/schemas/CreateReservationRequest'

  responses:

    '201':

      description: Reservation created

      content:

        application/json:

          schema:

            $ref: '#/components/schemas/Reservation'

Module Payments

Payment

Payment:

  type: object

  properties:

    id:

      type: string

      format: uuid

    amount:

      type: number

    status:

      $ref: '#/components/schemas/PaymentStatus'

    paymentDate:

      type: string

      format: date-time

PaymentStatus

PaymentStatus:

  type: string

  enum:

    - PENDING
 
    - AUTHORIZED
 
    - PAID
 
    - FAILED
 
    - REFUNDED

Pagination standard

Paramètres

Page:

  name: page

  in: query

  schema:

    type: integer

    minimum: 1

PageSize:

  name: pageSize

  in: query

  schema:

    type: integer

    minimum: 1

    maximum: 100

Réponse

PaginationMeta:

  type: object

  properties:

    page:

      type: integer

    pageSize:

      type: integer

    total:

      type: integer

    pages:

      type: integer

Gestion des erreurs

ErrorResponse

ErrorResponse:

  type: object

  properties:

    success:

      type: boolean

      example: false

    error:

      type: object

      properties:

        code:

          type: string

        message:

          type: string

Codes

VALIDATION_ERROR

UNAUTHORIZED

FORBIDDEN

NOT_FOUND

CONFLICT

INTERNAL_ERROR

Validation

UUID

type: string

format: uuid

Email

type: string

format: email

Date

type: string

format: date

DateTime

type: string

format: date-time

Génération automatique

À partir de cette spécification, génération :

Backend

DTO NestJS

Swagger

Validation

Tests contractuels

Frontend

SDK TypeScript

Hooks TanStack Query

Schemas Zod

Types TypeScript

Mobile

SDK Flutter

SDK React Native

Livrables OpenAPI

Le projet complet nécessitera :

Élément Volume
Modules API 11
Endpoints ~250
DTO ~200
Schémas ~150
Lignes YAML 8 000 à 15 000

Recommandation finale

La prochaine étape réellement productive n'est plus documentaire mais générative.

À partir de tout ce qui a été produit, il devient pertinent de générer automatiquement :

  • Prisma Schema complet
  • Entités NestJS
  • DTO NestJS
  • SDK Frontend TypeScript
  • Structure Monorepo
  • Docker Compose
  • GitHub Actions
  • Helm Charts

afin d'obtenir le premier socle de code exécutable du projet.

C'est généralement à ce stade que démarre effectivement le développement logiciel.

ujusum/1-projet/12-open-api-yaml.txt · Dernière modification : 2026/06/06 03:05 de 91.170.108.99

DokuWiki Appliance - Powered by TurnKey Linux