Voorbeeld 1: Eenvoudige Webshop

In dit voorbeeld maken we een eenvoudige webshop API met de volgende collecties:

  • Products: een collectie van producten met eigenschappen zoals naam, prijs, voorraad en categorie
  • Categories: een collectie van productcategorieën die helpt bij het organiseren van producten
  • Orders: een collectie van bestellingen geplaatst door gebruikers
  • OrderItems: een collectie van individuele items binnen een bestelling, met referenties naar producten

Volledige JSON-configuratie

{
  "collections": [
    {
      "name": "products",
      "fields": [
        {
          "name": "id",
          "type": "number",
          "required": true
        },
        {
          "name": "name",
          "type": "string",
          "required": true,
          "min": 2,
          "Max": 100
        },
        {
          "name": "description",
          "type": "string",
          "Max": 1000
        },
        {
          "name": "price",
          "type": "number",
          "required": true,
          "min": 0,
          "default": 0
        },
        {
          "name": "stock",
          "type": "number",
          "required": true,
          "min": 0,
          "default": 0
        },
        {
          "name": "categoryId",
          "type": "reference:categories",
          "required": true
        },
        {
          "name": "imageUrl",
          "type": "string",
          "Max": 255
        }
      ],
      "permissions": {
        "GET": ["anonymous", "user", "admin"],
        "POST": ["admin"],
        "PUT": ["admin"],
        "DELETE": ["admin"]
      }
    },
    {
      "name": "categories",
      "fields": [
        {
          "name": "id",
          "type": "number",
          "required": true
        },
        {
          "name": "name",
          "type": "string",
          "required": true,
          "min": 2,
          "Max": 50
        },
        {
          "name": "description",
          "type": "string",
          "Max": 500
        }
      ],
      "permissions": {
        "GET": ["anonymous", "user", "admin"],
        "POST": ["admin"],
        "PUT": ["admin"],
        "DELETE": ["admin"]
      }
    },
    {
      "name": "orders",
      "fields": [
        {
          "name": "id",
          "type": "number",
          "required": true
        },
        {
          "name": "userId",
          "type": "reference:users",
          "required": true
        },
        {
          "name": "orderDate",
          "type": "date",
          "required": true,
          "default": "CurrentDate"
        },
        {
          "name": "status",
          "type": "string",
          "required": true,
          "default": "pending"
        },
        {
          "name": "total",
          "type": "number",
          "required": true,
          "min": 0,
          "default": 0
        }
      ],
      "permissions": {
        "GET": ["user", "admin"],
        "POST": ["user"],
        "PUT": ["admin"],
        "DELETE": ["admin"]
      }
    },
    {
      "name": "orderItems",
      "fields": [
        {
          "name": "id",
          "type": "number",
          "required": true
        },
        {
          "name": "orderId",
          "type": "reference:orders",
          "required": true
        },
        {
          "name": "productId",
          "type": "reference:products",
          "required": true
        },
        {
          "name": "quantity",
          "type": "number",
          "required": true,
          "min": 1,
          "default": 1
        },
        {
          "name": "unitPrice",
          "type": "number",
          "required": true,
          "min": 0
        }
      ],
      "permissions": {
        "GET": ["user", "admin"],
        "POST": ["user"],
        "PUT": ["admin"],
        "DELETE": ["admin"]
      }
    }
  ],
  "users": [
    {
      "email": "[email protected]",
      "password": "admin123",
      "roles": ["admin"]
    },
    {
      "email": "[email protected]",
      "password": "klant123",
      "roles": ["user"]
    }
  ],
  "data": {
    "categories": [
      {
        "id": 1,
        "name": "Elektronica",
        "description": "Elektronische apparaten en gadgets"
      },
      {
        "id": 2,
        "name": "Boeken",
        "description": "Diverse boeken en e-books"
      },
      {
        "id": 3,
        "name": "Kleding",
        "description": "Mode en accessoires"
      }
    ],
    "products": [
      {
        "id": 1,
        "name": "Smartphone",
        "description": "High-end smartphone met topfuncties",
        "price": 499.99,
        "stock": 50,
        "categoryId": 1,
        "imageUrl": "/images/smartphone.jpg"
      },
      {
        "id": 2,
        "name": "Laptop",
        "description": "Krachtige laptop voor werk en gaming",
        "price": 899.99,
        "stock": 25,
        "categoryId": 1,
        "imageUrl": "/images/laptop.jpg"
      },
      {
        "id": 3,
        "name": "Programmeren voor beginners",
        "description": "Leer de basis van programmeren",
        "price": 29.99,
        "stock": 100,
        "categoryId": 2,
        "imageUrl": "/images/programming-book.jpg"
      },
      {
        "id": 4,
        "name": "T-shirt",
        "description": "Casual t-shirt in verschillende kleuren",
        "price": 19.99,
        "stock": 200,
        "categoryId": 3,
        "imageUrl": "/images/tshirt.jpg"
      }
    ],
    "orders": [],
    "orderItems": []
  }
}

Belangrijkste kenmerken

  • Producten en categorieën zijn publiekelijk zichtbaar (anonymous toegang)
  • Bestellingen zijn alleen zichtbaar voor de gebruiker zelf en beheerders
  • Alleen beheerders kunnen producten en categorieën toevoegen of wijzigen
  • Gebruikers kunnen bestellingen plaatsen
  • De API ondersteunt CRUD-operaties voor alle collecties