# Exposer des actions via un seul endpoint API

> Déclarez des endpoints ROUTE('API ...') pour qu'un client appelle de nombreuses actions avec POST {schema, data} sur une seule URL.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: aff666970c87241ed76becab952023ffc19593f8888356d919b02e1ec21bf70a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Une route API publie des actions sous une seule URL. Le client envoie toujours `POST` avec un body JSON `{ "schema": "name", "data": { ... } }`, et Total.js le transmet à l'action enregistrée sous ce nom. Une URL, de nombreuses opérations : c'est le style que parle la fonction `API()` de jComponent.

Le préfixe du nom décide de ce qui arrive à `data` :

- `+name` : l'entrée de l'action est obligatoire et validée
- `-name` : l'action ne prend aucune entrée
- `%name` : entrée partielle (pour les patches)

```js definitions/math.js
NEWACTION('Math/add', {
	name: 'Add two numbers',
	input: '*a:Number, *b:Number',
	action: function($, model) {
		$.callback({ sum: model.a + model.b });
	}
});

NEWACTION('Math/time', {
	name: 'Server time',
	action: function($) {
		$.callback({ year: new Date().getFullYear() });
	}
});
```

```js controllers/api.js
exports.install = function() {
	ROUTE('API /api/ +math_add --> Math/add');
	ROUTE('API /api/ -math_time --> Math/time');
};
```
