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 eenFuture<String>retourneren.methods: De HTTP-methoden waarop de route moet reageren. Het is een lijst vanString. Bijvoorbeeld['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD', 'CONNECT', 'TRACE'].controller: De controller die gebruikt moet worden voor de route. Dit moet een instantie vanControllerzijn.children: De child-routes van de huidige route. Dit is een lijst vanFinchRoute.extraPath: Extra paden voor de route. Dit is een lijst vanString. Bijvoorbeeld['/home', '/index'].apiDoc: De functie om API-documentatie voor de route te genereren. Het moet eenFuture<ApiDoc>retourneren.auth: De authenticatie-controller die gebruikt moet worden voor de route. Het moet een instantie vanAuthControllerzijn.permissions: De vereiste permissies voor de route. Dit is een lijst vanString. Bijvoorbeeld['admin'].widget: Het widget dat voor de route wordt weergegeven. Dit moet eenStringzijn dat het pad naar het widget-bestand voorstelt.params: De standaardparameters die naar het widget worden doorgegeven. Dit is eenMap<String, Object?>.title: De titel van de pagina. Dit is eenString.excludePaths: De paden die van de route moeten worden uitgesloten. Dit is een lijst vanString.hosts: De hosts waarop de route moet reageren. Dit is een lijst vanString. Bijvoorbeeld['example.com', 'www.example.com'].ports: De poorten waarop de route moet reageren. Dit is een lijst vanint. 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');
},
);