# Utiliser l'API DATA pour changer de base de données

> DATA adresse une table sous la forme base/table, si bien que le même code de requêtes fonctionne avec le NoSQL intégré et avec d'autres bases.

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

`DATA` est un point d'entrée du query builder indépendant de la base de données. Le premier argument est `driver/table` ; `nosql/people` signifie « la base NoSQL intégrée, table `people` ». Les méthodes du builder (`where`, `sort`, `take`, `callback`) sont les mêmes que celles de `NOSQL()`, donc le code de vos actions reste identique si vous remplacez le driver plus tard.

| Appel | Fait |
|---|---|
| `DATA.insert(table, doc)` | insère un document |
| `DATA.find(table)` | renvoie un builder pour une liste |
| `DATA.read(table)` | renvoie un builder pour un document |
| `DATA.update(table, data)` | met à jour des documents |
| `DATA.remove(table)` | supprime des documents |

```js definitions/people.js
NEWACTION('People/insert', {
	name: 'Insert a person',
	input: '*name:String, age:Number',
	action: function($, model) {
		model.id = UID();
		DATA.insert('nosql/people', model).callback(() => $.success(model.id));
	}
});

NEWACTION('People/query', {
	name: 'List people',
	query: 'sort:Lowercase',
	action: function($) {
		DATA.find('nosql/people').sort($.query.sort || 'name_asc').callback((err, response) => $.callback(response));
	}
});

NEWACTION('People/rename', {
	name: 'Rename a person',
	params: '*id:UID',
	input: '*name:String',
	action: function($, model) {
		DATA.update('nosql/people', { name: model.name }).where('id', $.params.id).callback((err, count) => $.success(count));
	}
});
```

```js controllers/people.js
exports.install = function() {
	ROUTE('POST /people/ --> *People/insert');
	ROUTE('GET /people/ --> *People/query');
	ROUTE('PATCH /people/{id}/ --> *People/rename');
};
```
