Problem z zaprojektowaniem ścieżek w API

Odpowiedz Nowy wątek
2019-07-17 09:20

Rejestracja: 2 lata temu

Ostatnio: 1 godzina temu

0

Mam aplikację, w której użytkownik może uznać recenzję produktu za pomocną lub niepomocną. Mam tabelę ReviewLike (wiem, słaba nazwa, ma ktoś lepszą?) z kolumnami ReviewId, CustomerId, IsLike. Nie wiem, jak zaprojektować ścieżki w REST API do tego. Wymyśliłem na razie coś takiego:
POST api/review-likes?reviewId=100 {isLike=true}
PUT api/review-likes?reviewId=100 {isLike=false}
DELETE api/review-likes?reviewId=100

1) Czy powinienem dołączyć do tabeli ReviewLike kolumnę z unikalnym id? Z jednej strony jest to niepotrzebne, ale z drugiej strony ścieżki w API ładniej by wyglądały.
2) Czy można to jakoś ładniej rozwiązać? Ten drugi endpoint PUT wydaje mi się dziwny i nienaturalny.

Pozostało 580 znaków

2019-07-17 12:53

Rejestracja: 2 lata temu

Ostatnio: 1 godzina temu

0

No ok, ale chyba musi być jakaś "biblia" REST API, tak jak to jest w DDD.

tak jak to jest w DDD o to ciekawe, a o której biblii DDD mówisz? O Starym czy Nowym Testamencie? :D :D - Shalom 2019-07-17 12:53
Nowy Testament poprawia to, co jest źle w Starym :D - nobody01 2019-07-17 12:54

Pozostało 580 znaków

2019-07-17 12:55
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

2

https://tools.ietf.org/html/rfc7231 + https://roy.gbiv.com/pubs/dissertation/top.htm przynajmniej "historycznie" więc to taki Stary Testament


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2019-07-17 12:55

Pozostało 580 znaków

2019-07-17 13:13

Rejestracja: 17 lat temu

Ostatnio: 43 sekundy temu

Lokalizacja: Kraków

2

REST w żaden sposób nie definiuje tego jak ścieżki/url powinny wyglądać, rozdział 6.2.4 Binding Semantics to URI z przytoczonej wyżej rozprawy doktorskiej

Semantics are a by-product of the act of assigning resource identifiers and populating those resources with representations. At no time whatsoever do the server or client software need to know or understand the meaning of a URL -- they merely act as a conduit through which the creator of a resource (a human naming authority) can associate representations with the semantics identified by the URI. In other words, there are no resources on the server; just mechanisms that supply answers across an abstract interface defined by resources. It may seem odd, but this is the essence of what makes the Web work across so many different implementations.

także wszystkie przytoczone w tym temacie ścieżki są poprawne z punktu widzenia REST.


It's easy to hate code you didn't write, without an understanding of the context in which it was written.

Pozostało 580 znaków

2019-07-17 15:42
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

3
nobody01 napisał(a):

@Patryk27: Tylko czy wtedy nie będę miał RPC?

Ale czemu właściwie uważasz, że to RPC?
Jest URL wskazujący na zasób, operacje są zróżnicowane metodami HTTP, a nie urlami albo zawartością requestu. Jak dla mnie to jest wystarczająco restowe.

RPC by było, gdybyś na jeden endpoint słał <AddLikeRequest> albo <DeleteLikeRequest>.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-07-17 16:12

Rejestracja: 2 lata temu

Ostatnio: 1 godzina temu

0

Ok, w sumie jak teraz czytam, to okazuje się, że w "restowych" urlach jednak mogą pojawiać się czasowniki dla jakichś niestandardowych operacji. https://stackoverflow.com/a/27122233 Chociaż nie zdaniem wszystkich...

edytowany 2x, ostatnio: nobody01, 2019-07-17 16:17

Pozostało 580 znaków

2019-07-17 16:44
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

1

To chyba wśród tych, którzy robią tylko crudy, i to bez żadnego uwierzytelniania, bo restowo to nawet zalogować dobrze się nie da. :P


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-07-17 16:51
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 godziny temu

1

bo restowo to nawet zalogować dobrze się nie da

Da się.

POST /user/session

Pozostało 580 znaków

2019-07-17 21:49
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

0

Przede wszystkim powinno być users, a potem w path powinien być id usera, bo przecież to sesja konkretnego użytkownika, a nie jakaś taka ogólna.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-07-18 00:01
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 godziny temu

1

@somekind:

  1. Niekoniecznie musi być user, zależy od konwencji, to samo z ID, bo nie musisz tworzyć sesji dla usera o ID x a zwyczajnie sesję, na podstawie podanych danych.
  2. To możesz użyć:

    • POST /sessions
    • POST /users/me/sessions
    • POST /me/sessions

    Cokolwiek będzie Tobie pasować do reszty aplikacji.


Pozostało 580 znaków

2019-07-18 00:28
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

1

Myślę, że spokojnie możesz to na jakimś stacku napisać, i zobaczyć świętą wojnę o to, że musi być users, a sessions to nie jest zasób :P


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0