Routinggids

Welkom bij de Finch Routinggids! Deze gids begeleidt je bij het configureren van routing in je Finch-applicatie. Of je nu een ervaren ontwikkelaar bent of net begint, Finch biedt krachtige hulpmiddelen om server-side webapplicatieontwikkeling te vereenvoudigen.

FinchRoute

De FinchRoute-klasse wordt gebruikt om een route in je Finch-applicatie te definiëren. Het bevat alle nodige eigenschappen om een route te definiëren. Hier is een voorbeeld van hoe je het gebruikt:

FinchRoute(
  path: '/',
  index: () async => rq.renderString(text: 'Hello World'),
);

Eigenschappen:

  • path: Het pad van de route. Het kan variabelen bevatten in de vorm {variableName}. Bijvoorbeeld /users/{id}.
  • index: De functie die wordt aangeroepen wanneer de route wordt gematcht. Deze moet een Future<String> retourneren.
  • methods: De HTTP-methoden waarop de route moet reageren. Het is een lijst van String. Bijvoorbeeld ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD', 'CONNECT', 'TRACE'].
  • controller: De controller die gebruikt moet worden voor de route. Dit moet een instantie van Controller zijn.
  • children: De child-routes van de huidige route. Dit is een lijst van FinchRoute.
  • extraPath: Extra paden voor de route. Dit is een lijst van String. Bijvoorbeeld ['/home', '/index'].
  • apiDoc: De functie om API-documentatie voor de route te genereren. Het moet een Future<ApiDoc> retourneren.
  • auth: De authenticatie-controller die gebruikt moet worden voor de route. Het moet een instantie van AuthController zijn.
  • permissions: De vereiste permissies voor de route. Dit is een lijst van String. Bijvoorbeeld ['admin'].
  • widget: Het widget dat voor de route wordt weergegeven. Dit moet een String zijn dat het pad naar het widget-bestand voorstelt.
  • params: De standaardparameters die naar het widget worden doorgegeven. Dit is een Map<String, Object?>.
  • title: De titel van de pagina. Dit is een String.
  • excludePaths: De paden die van de route moeten worden uitgesloten. Dit is een lijst van String.
  • hosts: De hosts waarop de route moet reageren. Dit is een lijst van String. Bijvoorbeeld ['example.com', 'www.example.com'].
  • ports: De poorten waarop de route moet reageren. Dit is een lijst van int. Bijvoorbeeld [80, 443].

Voorbeeld van een eenvoudige route-definitie:

FinchRoute(
  key: 'route.users',
  path: '/users',
  index: () async => rq.renderJson(data: {'message': 'Users list'}),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // of ['*'] voor alle hosts
  ports: [80, 443], // of [] voor alle poorten
);

Voorbeeld van een route met controller:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // of ['*'] voor alle hosts
  ports: [80, 443], // of [] voor alle poorten
);

Voorbeeld van een route met child-routes:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // of ['*'] voor alle hosts
  ports: [80, 443], // of [] voor alle poorten
  children: [
    FinchRoute(
      key: 'route.users.show',
      path: '/{id}',
      index: () async => rq.renderJson(data: {'message': 'User details'}),
      methods: Methods.ONLY_GET,
    ),
  ],
);

Voorbeeld van een route met authenticatie en permissies:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // of ['*'] voor alle hosts
  ports: [80, 443], // of [] voor alle poorten
  auth: AppAuthController(),
  permissions: ['admin'],
);

AppAuthController is een klasse die AuthController uitbreidt. Voor een voorbeeld daarvan kun je kijken in de example map.

API Routing

Finch biedt een handige manier om API-routes te definiëren. Je kunt het /api pad van FinchApp gebruiken om een API-route te definiëren. Hier is een voorbeeld:

app.get(
  path: '/api/users',
  controller: UserController(),
);

Parameter Routing

Om parameters in het pad te definiëren, gebruik je de {} syntax. Bijvoorbeeld /users/{id}. Je kunt de parameter in de index functie ophalen via rq.getParam('id').

app.get(
  path: '/users/{id}',
  index: (rq) async {
    var id = rq.getParam('id');
    return rq.renderString(text: 'User ID: $id');
  },
);