Návrh REST API rubrika: Návrh
Pořád spekuluji jak správně navrhnout API (asi mi něco uniká).
Je mi jasné že když chci manipulovat např. s autem tak to bude:
/cars (GET,POST,PUT,DELETE) Auta
/cars/:uid (GET,POST,PUT,DELETE) Auto
To stejné např. pro osobu
/persons(GET,POST,PUT,DELETE) Osoby
/person/:uid (GET,POST,PUT,DELETE) Osoba
Ale není mi jasné, jak správně napsat API pro metody typu:
- Připoj osobu k autu
- Připoj auto k osobě
/persons/addCar ?
/persons/:uid/addcar/:uid
/persons PUT (update cars)
/cars/addPerson ?
Nechci si zadělat API tisíci metodami typu addPerson, doThis, doThat.
Jak to řešíte vy ?
Ve svém pochopení RESTu máš chybu.
/cars (GET,POST,PUT,DELETE) Auta
/cars/:uid (GET,POST,PUT,DELETE) Auto
Je model, který tlačí Ruby on Rails a je zcela špatně.
Při návrhu REST API zapomeň, že existují nějaké modely, data. Nejhorší věc, kterou můžeš udělat, je sekat RESTová API jako CRUDy. Hodně lidí to tak dělá, ale dělají to špatně, výsledkem je, že se pak to API musí volat příliš mockrát, že vznikají zbytečné metody, že některé věci nejdou udělat, nebo moc složitě.
Správné řešení je vytvářet API podle use-cases. Tzn. chceš-li upravit auto, může být /cars/:id PUT v pořádku. Ale čirou náhodou jen proto, že víš, že klient bude upravovat auto.
Use case je i připoj osobu k autu, můžeš to pojmenovat /person/connect-with-car PUT, nebo /person-connect-with-car PUT nebo dokonce /connect-person-with-car PUT, nebo třeba /connect/person/car PUT.
Všechno jsou to jen jména. URL jsou ve skutečnosti nedůležitá. Dobré řešení by bylo i ?action=connect&what=person&with=car PUT. Pokud si napíšeš knihovnu, která tě odstíní, URL může být i /asdflkjasdfjkl PUT.
Správný postup při návrhu API (REST je detail) zní:
1) zjistit, jak bude klient používat API (nejdůležitější bod)
2) navrhnout jeden logický způsob pojmenování (a může to být /sloveso/ostatní/parametry, nebo ?action=sloveso&ostatni-parametry... nebo cokoliv dalšího)
3) to implementovat
4) sledovat, jestli klient používá API tak, jak jsi myslel
5) vydat verzi 2, která opraví chyby
Pokud nemůžeš udělat krok 1, jsi v pěkné kaši (jako fakt, psát API a nevědět, jak bude klient to API používat, celou věci ztěžuje asi 10-násobně).
Tam místo původního bodu 1 si to nahraď bodem:
1) nastřel API, jak si myslíš (a jak si se ptal všech potenciálních uživatelů API, které znáš), jaké mají v plánu s API dělat workflow a navrhni pro každý krok každého workflow metody s upozorněním, že verze 2 vyjde velmi brzo
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře