# Total.js-API-Routen mit API() aufrufen

> Nutze API(url, name, data, callback), um die Actions eines ROUTE('API ...')-Endpunkts aufzurufen, einschließlich Validierungsfehlern.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: de
Content-SHA256: 41357462d1bcc33a0e245452db8c22187b11d1ab21a56f330f03e45dc3dc7530
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: jcomponent20@3fedd009a277f50fddc608b97afbec553b67c51b
Review: not-recorded

`API(url, name, data, callback)` ist die Client-Seite der Total.js-Endpunkte `ROUTE('API ...')`. Sie sendet `POST url` mit dem Body `{ schema: name, data: data }` und ruft den Callback mit der Antwort auf. Antwortet der Server mit einem Fehler (zum Beispiel einem Validierungsfehler), erhält der Callback ein Array von Fehlern: Nutze den Helper `ERROR(response, success, error)`, um beide Fälle an einer Stelle zu behandeln.

Lege die Adresse des Endpunkts einmal in `ENV()` ab und verwende sie weiter.

```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 });
	}
});
```

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

```html public/index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>jComponent</title>
	<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
	<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
	<p class="sum"></p>
	<p class="error"></p>

	<script>

		ENV('api', '/api/');

		API('[api]', 'math_add', { a: 20, b: 22 }, function(response) {
			SET('sum', response.sum);
		});

		API('/api/', 'math_add', { a: 'x' }, function(response) {
			ERROR(response, function(value) {
				SET('failed', 'unexpected success');
			}, function(errors) {
				SET('failed', errors[0].name);
			});
		});

	</script>

</body>
</html>
```
