2012-07-05 17 views
5

Próbuję utworzyć interfejs API dla dwóch zasobów: jednego z użytkownikami i drugiego z filmami. Oba zasoby mają powiązania - użytkownik będzie miał wiele filmów, a film będzie miał wielu użytkowników. Można przypuszczać, że będę zaprojektować API coś takiego:Interfejs API RESTful ze skojarzeniami

/api/users/ 
/api/users/:id 
/api/users/:id/movies 

/api/movies/ 
/api/movies/:id 
/api/movies/:id/users 

Ale tutaj jest problem: Używam również backbone.js po stronie klienta w celu pobrania danych API. Jeśli Gdybym utworzyć kolekcję na

/api/users/:id/movies 

to będzie działać dobrze dla żądań GET, ale POST i PUT żądań byłoby pozornie następnie być kierowane pod adresem:

/api/users/:id/movies/:id 

Ale pozornie byłoby lepiej jeśli zamiast tego wysłano go pod numer

/api/movies/:id 

. Czy to jest poprawne? Jak ludzie zazwyczaj radzą sobie ze stowarzyszeniami RestFul?

Odpowiedz

1

Nie jestem pewien, co masz na myśli przez "Żądania POST i PUT wydają się wtedy kierowane na ...". Czy Backbone.js automatycznie dodaje parametry do adresów URL? Jeśli tak, powinieneś spojrzeć na konfigurację tak, aby tego nie robić, ponieważ nie będzie można jej użyć z interfejsem API REST. Łącza udostępniane przez interfejs API REST powinny być pełne, nie można ich dodawać ani usuwać.

Wreszcie, jeśli chcesz powiązać film z użytkownikiem. chcesz opublikować film (lub tylko jego identyfikator) do:

/api/users/:id/movies 
+0

Dzięki Laurent. Backbone dołącza identyfikator do adresu URL do POST lub umieszcza nowy model w kolekcji, do której należy. Innymi słowy, kolekcja będzie miała URL/api/users/1/movies, a POST automatycznie użyje adresu URL/api/users/1/movies /: id. Wydaje mi się, że bardziej odpowiedni jest adres URL POST/api/movies /: id ... ale może się mylę. Po stronie serwera mogłem potencjalnie obsłużyć również POST do/api/users/1/movies /: id. – bento

-2

Jak rozumiem jesteś próbuje dowiedzieć się czegoś czytelny i standardowy sposób tworzenia URL usługi REST. Prawdziwa historia jest taka, że ​​adres URL usługi jest całkowicie odmienny od interfejsu API.

usługa url może być wygląda następująco:

/api/getMovies/userId: zaangażowany zamówienie Pobierz

/api/updateMovieList/userId: zaangażowany postu

to są bardziej intuicyjne i własny ekspresyjny.

ma dobre zasoby do przejścia.

+0

wydaje się, że musisz zaktualizować tę odpowiedź, – Forhad

Powiązane problemy