RESTful API, ASP.NET Core IOC

0

Cześć, mam dwa pytanka do bardziej doświadczonych kolegów.

Buduję API mam dwa endpointy.
GET /user/{id}
GET /user/{email}

Pierwsze pytanie, dopuszczalne jest dla maila zastosowanie dodatkowego poziomu /email a dla id zostaje jak wyżej, czy nie łamię tym zasad REST. Jak to jest rozwiązywane w komercyjnych projektach.
GET /user/email/{email}

Drugie pytanie, związane do domyślnym kontenerem IOC w ASP.NET Core.
services.AddTransient<IUserService,UserService>();
services.AddScoped<IUserService, UserServicer>();

W róznych materiałach bardzo często były używane zamiennie. Jak wiemy transient wykonuje się per wywłoanie kodu, scoped per żądanie http.
Teraz pytanie dla serwisów, która opcję lepiej jest używać

2

Jeśli chodzi o IOC to odpowiedz sobie czy ten serwis będziesz w jednym żądaniu wczytywał kilka razy? Wydaje mi się, że raczej nie więc jaki użyjesz lifetime scope to raczej nie będzie miało znaczenia. Chodź ja używam Scopa. Znaczenie będzie przy EF DbContext, który domyślnie ma scope

1

Scope przy Contexcie może się przydać jeżeli chcesz robić multiserwisowe 'transakcje'

2

W kwestii RESTa ja bym powiedział, że takie łamanie przez email jest niepoprawne, bo to by sugerowało, że zwracanym typem resource'a by był email. Jeszcze taka uwaga: w REST nazwy resourców powinny być w liczbie mnogiej.

Ja bym to zrobił tak.

GET /users/{id}
GET /users?filter[email]={email}
1

Zasad REST'a nie łamiesz, w rozprawie doktorskiej definiującej REST jest wyraźnie podkreślone że w url może być cokolwiek:

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 URI — 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.

natomiast inna kwestią jest tworzenie hackable http api i tutaj powszechnymi praktykami są te wspomniane w poście wyżej.

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