Inventar (Inventories)¶
Die Inventar-API verwaltet alle Prüfmittel und Messinstrumente im System.
Endpunkte¶
| Methode | Pfad | Beschreibung | Berechtigung |
|---|---|---|---|
GET |
/api/v2/inventories |
Alle Inventare auflisten | inventory_view |
GET |
/api/v2/inventories/{id} |
Einzelnes Inventar abrufen | inventory_view |
POST |
/api/v2/inventories |
Inventar anlegen | inventory_edit |
PUT |
/api/v2/inventories/{id} |
Inventar aktualisieren | inventory_edit |
DELETE |
/api/v2/inventories/{id} |
Inventar löschen | inventory_delete |
Feldmapping¶
Jedes Feld besitzt drei Bezeichner: den V1-Code (Metrologie-/MetTrack-Code
wie I4206), die DB-Spalte (physischer Spaltenname wie serial_number) und
den API-Namen — den Bezeichner, den die API nach außen verwendet (in
Response-Feldern, im filter[...], im sort und als Grid-Spalte).
| V1-Code | DB-Spalte | Beschreibung |
|---|---|---|
I4201 |
asset_number |
Prüfmittel-Nummer |
I4202 |
manufacturer |
Hersteller |
I4203 |
model |
Modell |
I4204 |
description |
Messmittelbeschreibung |
I4206 |
serial_number |
Seriennummer |
API-Namen wählen: V1-Code oder DB-Spalte¶
Welcher Bezeichner als API-Name dient, ist konfigurierbar. Bestandskunden
integrieren gegen die V1-Codes — deshalb ist der V1-Code die Standard-
Vorgabe: Die API liefert und akzeptiert Felder dann unter ihrem Code (z.B.
I4206 statt serial_number). Der gespeicherte Wert bleibt unverändert in
seiner physischen DB-Spalte; nur der nach außen sichtbare Feldname ändert sich.
In der Feldverwaltung (Admin → Felddefinitionen) stehen pro Tabelle zwei
Massenaktionen bereit (Berechtigung field_management_admin):
- „API-Name = V1-Code" — setzt den API-Namen aller Felder auf ihren V1-Code
(
serial_number→I4206). Das ist die Werksvorgabe. - „API-Name = DB-Spalte" — setzt den API-Namen auf den lesbaren
DB-Spaltennamen (
I4206→serial_number).
Programmatisch entspricht das dem Endpunkt:
curl -X POST "https://example.com/api/v2/field-definitions/inventory/copy-api-name" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{ "source": "v1_name" }' # oder "column_name"
Beispiele auf dieser Seite
Die folgenden Beispiele nutzen die lesbaren Namen (serial_number,
manufacturer). Ist der V1-Code als API-Name aktiv, treten überall die
Codes an ihre Stelle (I4206, I4202) — in Request- und
Response-Feldern sowie in filter[...] und sort.
Alle Inventare auflisten¶
curl -X GET "https://example.com/api/v2/inventories?page=1&per_page=25" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
Query-Parameter¶
| Parameter | Typ | Beschreibung |
|---|---|---|
page |
integer | Seitennummer (Standard: 1) |
per_page |
integer | Einträge pro Seite (Standard: 25) |
sort |
string | Sortierfeld, z.B. inventory_number oder -manufacturer (absteigend) |
filter[manufacturer] |
string | Nach Hersteller filtern |
filter[serial_number] |
string | Nach Seriennummer filtern |
filter[customer_id] |
integer | Nach Kunde filtern |
fields |
string | Kommaliste der Felder, die die Antwort tragen soll |
Nur die Felder holen, die gebraucht werden
Ohne fields traegt jede Zeile den vollstaendigen Attributsatz der
Installation — auf einer gewachsenen Registry ueber hundert Felder je
Zeile. ?fields=asset_number,manufacturer,status schneidet das zu, und
zwar nicht nur die Antwort: Der Server laedt dann auch nur die Relationen
und liest nur die Spalten, die dafuer noetig sind.
Ein Feld ist unter seinem api_name, seinem physischen Spaltennamen oder
seinem V1-Code adressierbar. Abgeleitete Werte kommen mit ihrem Feld:
customer_id bringt customer_id_label mit, status bringt
status_label. Filter und Sortierung duerfen weiterhin Felder nennen, die
nicht angefordert sind.
Antwort¶
{
"data": [
{
"id": 1,
"inventory_number": "PM-2024-001",
"manufacturer": "Fluke",
"model": "8845A",
"serial_number": "SN-123456",
"customer_id": 5,
"relationships": {
"customer": {
"id": 5,
"name": "Mustermann GmbH"
},
"calibrations": [
{ "id": 12, "calibration_date": "2024-06-15" }
],
"categories": [
{ "id": 3, "name": "Multimeter" }
]
}
}
],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 142,
"last_page": 6
},
"links": {
"first": "/api/v2/inventories?page=1",
"last": "/api/v2/inventories?page=6",
"next": "/api/v2/inventories?page=2",
"prev": null
}
}
Einzelnes Inventar abrufen¶
curl -X GET "https://example.com/api/v2/inventories/1" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
Die Antwort enthält das vollständige Inventar-Objekt im data-Feld inklusive aller Beziehungen (Customer, Calibrations, Categories).
Inventar anlegen¶
curl -X POST "https://example.com/api/v2/inventories" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"inventory_number": "PM-2024-002",
"manufacturer": "Keysight",
"model": "34461A",
"serial_number": "MY-987654",
"customer_id": 5
}'
Pflichtfelder
Mindestens inventory_number muss angegeben werden. Alle weiteren Felder sind optional, aber empfohlen.
Erfolgreiche Antwort (201)¶
{
"data": {
"id": 2,
"inventory_number": "PM-2024-002",
"manufacturer": "Keysight",
"model": "34461A",
"serial_number": "MY-987654",
"customer_id": 5
}
}
Inventar aktualisieren¶
curl -X PUT "https://example.com/api/v2/inventories/2" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"manufacturer": "Keysight Technologies",
"serial_number": "MY-987654-A"
}'
Partielle Updates
Es müssen nur die zu ändernden Felder gesendet werden. Nicht enthaltene Felder bleiben unverändert.
Inventar löschen¶
curl -X DELETE "https://example.com/api/v2/inventories/2" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
Achtung
Das Löschen eines Inventars entfernt auch alle verknüpften Kalibrierungen und Dokumente. Diese Aktion kann nicht rückgängig gemacht werden.
Erfolgreiche Antwort (200)¶
Sortierung und Filterung¶
Sortierbeispiele¶
# Aufsteigend nach Inventarnummer
curl "https://example.com/api/v2/inventories?sort=inventory_number" \
-H "Authorization: Bearer {token}"
# Absteigend nach Hersteller
curl "https://example.com/api/v2/inventories?sort=-manufacturer" \
-H "Authorization: Bearer {token}"
Filterbeispiele¶
# Nur Fluke-Geräte
curl "https://example.com/api/v2/inventories?filter[manufacturer]=Fluke" \
-H "Authorization: Bearer {token}"
# Geräte eines bestimmten Kunden
curl "https://example.com/api/v2/inventories?filter[customer_id]=5&sort=-inventory_number" \
-H "Authorization: Bearer {token}"
Fehlercodes¶
| HTTP-Status | Bedeutung |
|---|---|
401 |
Nicht authentifiziert — ungültiger oder fehlender Token |
403 |
Keine Berechtigung (inventory_view, inventory_edit oder inventory_delete fehlt) |
404 |
Inventar nicht gefunden |
422 |
Validierungsfehler — ungültige oder fehlende Felder |
429 |
Rate-Limit überschritten |