Problem z zaprojektowaniem ścieżek w API

Odpowiedz Nowy wątek
2019-07-17 09:20
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
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
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
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.


Java to taki C# tyle że z gorszą składnią.

Pozostało 580 znaków

2019-07-17 15:42
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
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
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
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
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
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
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
Liczba odpowiedzi na stronę

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