Załóżmy, że mam aplikację internetową JavaScript, która całkowicie wykorzystuje interfejs API RESTful dla danych.
Załóżmy, że ta aplikacja ma formularz danych, i powiedzmy, że edytuję rekord w / product / 12345. Podczas budowania formularza wysyłam żądanie RESTful do / product / 12345 i otrzymuję dane JSON:
{
"id": 12345,
"name": "Some Product",
"active": true,
"sales_user_id": 27
}
Więc mój formularz może oczywiście zawierać listę rozwijaną do wyboru sprzedawcy. Muszę wypełnić tę listę. Skąd dane powinny pochodzić? Jakie jest najczęstsze podejście?
Czy sensowne byłoby uczynienie go częścią odpowiedzi na żądanie / product / 12345?
{
"id": 12345,
"name": "Some Product",
"active": true,
"sales_user_id": 27,
"sales_users": [
{"id": 1, "name": "Anna Graham"},
{"id": 2, "name": "Dick Mussell"},
{"id": 3, "name": "Ford Parker"},
{"id": 4, "name": "Ferris Wheeler"},
{"id": 5, "name": "Jo King"}
]
}
Co powiesz na temat tworzenia nowego rekordu? Czy mój interfejs API powinien również odpowiadać na GET / produkt / nowy, z następującymi pytaniami?
{
"sales_users": [
{"id": 1, "name": "Anna Graham"},
{"id": 2, "name": "Dick Mussell"},
{"id": 3, "name": "Ford Parker"},
{"id": 4, "name": "Ferris Wheeler"},
{"id": 5, "name": "Jo King"}
],
"categories": [
{"id": 1, "name": "Category 1"},
{"id": 2, "name": "Category 2"},
{"id": 3, "name": "Category 3"},
{"id": 4, "name": "Category 4"},
{"id": 5, "name": "Category 5"}
],
"etc": [ ... ]
}
Odpowiedzi:
Opieram się na bardzo prostych, wąsko skoncentrowanych punktach końcowych. Oczekiwałbym żądania w niektórych lokalizacjach, takich jak / sales_users, które zwraca wszystkich użytkowników sprzedaży.
GET / sales_users:
Podobnie, jeśli masz mieć listę kategorii, dodałbym do tego osobny punkt końcowy.
POBIERZ / kategorie:
Nie zbudowałbym GET / produktu / nowego. Zamiast tego zbudowałbym w Twojej aplikacji formularz do obsługi dodawania nowych produktów, które znają odpowiednie prośby o zapełnienie jego list (np. GET / kategorie, GET / użytkownicy_sprzedaży itp.).
źródło
Zakładając, że lista sprzedawców jest względnie statyczna, pomyślałbym, że potrzebujesz osobnego wywołania API,
/salesusers
które możesz wywołać raz (po wczytaniu formularza itp.) I zaoszczędzić, abyś nie musiał ponownie żądać tych danych czas. Pamiętaj, że w REST organizujesz swój interfejs API wokół zasobów, a sprzedawcy są logicznie oddzielni zasoby od produktów.Podobnie, dzwoniąc
/product/new
, chciałbyś tylko przesłać dane dotyczące nowego produktu, które mogą zawierać identyfikator użytkownika Sales_user, ale nic więcej. Zmiany w samym user_user byłoby osobnym wywołaniem.źródło