Klient do REST API?

0

Witam!
Tworzę sobie małe REST API w PHP. Wszystko idzie fajnie, tylko tak się zacząłem zastanawiać co będzie po drugiej stronie, w sensie co powinno być klientem (nie wiem czy tak się to nazywa?) do API po stronie użytkownika. Powinienem zrobić całkowicie osobną aplikację również w PHP? Czyli jedna aplikacja to API a druga osobna to np. aplikacja łącząca się CURLem z API i pobierająca dane? Może powinienem jakoś to połączyć? Może ten klient to powinna być statyczna strona i pobierająca dane przez sam JavaScript? Nie wiem jak się za to zabrać, proszę o jakąś poradę. Na razie robię tylko stronę, w założeniu kiedyś mają się pojawić aplikacje mobilne i inne platformy.
A no i przy okazji mogę dopytać o jakąś autoryzację, wyczytałem że jest coś takiego jak JWT i z tego sobie korzystam, ale czy to jest dobre i przede wszystkim bezpieczne? Przy logowaniu generuje token i zwracam go użytkownikowi, w nim też przechowuje id użytkownika. Przy każdym requeście idzie on w nagłówku do API, sprawdzam go i na podstawie odczytanego id robię zapytanie do bazy, pobieram dane zalogowanego usera itd. Na produkcji będzie też HTTPS. Czy to jest poprawnie zrobione?
Z góry dzięki

0

Chcesz robić UI w pehapie? Webowe UI do restowego API robi się w JS (lub jego pochodnych), no i oczywiście HTML+CSS (lub ich pochodne). I nie żaden CURL tylko AJAX (najlepiej jakieś Fetch API). Desktopowe i mobilne UI też zresztą można tak robić.

0

Wiadomo, że HTML i CSS będzie i to w tym będzie UI, zastanawiałem się tylko jak to połączyć. Mówisz JavaScript i Ajax, a co się stanie jak trafi się ktoś bez włączonego JavaScript? Nie zwracać na to uwagi? Stąd myślałem API i osobnej aplikacji w PHP i to CURLem łączyło by się jako backend z API i generowało layout dla użytkownika. Wydaje się to jakoś tak hm, bardziej stabilne, backend podziała raczej zawsze, a JS może różnie w zależności od fanaberii przeglądarki użytkownika (ta czegoś nie obsługuje, tam coś nie działa itd.), no ale nie wiem, przychodzę do bardziej doświadczonych po radę.
I ponawiam pytanie co do JWT, czy dobrze że akurat tego używam?

0

Jak chcesz zrobić "klasyczną" aplikację, generującą widoki po stronie backendu, to stawianie generatora widoków jako osobnej aplikacji + jakieś CURLe to bezsens. Jak nie chcesz robi SPA w JavaScripcie, to zrób sobie zwykłe MVC + API dla mobili i desktopa ewentualnie. Tyle, że to jest coś za coś, SPA się robi by maksymalnie odseprować front od backendu i wyeliminować wszelkie przeładowania strony, na widokach pehapowych tego nie uzyskasz.

0

Hmm, no rozumiem, skoro tak mówisz to może masz rację.
Pisałeś o jakimś Fetch API w JS, mógłbyś podać jakiś przykład, albo wskazówki jak to dobrze zrobić i zaimplementować?

0

Fetch API nie ma co implementować, jest już zaimplementowane -> https://github.com/github/fetch
Należy po prostu użyć - to taki cywilizowany sposób robienia asynchronicznych zapytań, natywna (tylko w nowych przeglądarkach, stąd link do polyfilla) alternatywa dla takiego jQuery.ajax() i tego typu rzeczy.

Tu masz link do dokumentacji standardu: https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch

0

Okej, kumam. Spróbuję, popatrzę jak to działa, chociaż tutaj http://caniuse.com/#feat=fetch nie wygląda to zbyt dobrze (oprócz oczywiście dwóch wiadomych liderów).
Jakby ktoś jeszcze dopowiedział swoje stanowisko w tym temacie i powiedział coś o JWT to będę wdzięczny :)

0

co do jwt to oczywiście bardzo dobry sposób autoryzacji dla tego typu systemów o ile ktoś to poprawnie zaimplementował w swoim kodzie.

0

@mr_jaro a jak powinno być to poprawnie zaimplementowane? Masz jakiś przykład, tutorial?
Obecnie opieram się o to https://github.com/firebase/php-jwt i właściwie korzystam tylko z tego co jest pokazane w przykładzie - przy logowaniu użytkownika robię encode i zwracam token w którym jest id użytkownika z bazy, potem idzie on w każdym requeście w nagłówkach i przy użyciu decode to odczytuję i pobieram na podstawie odczytanego id dane usera.

0

Jeszcze odnowienie tokenu po jakimś czasie zaimplementuj. Token nie może być wieczny.

0

@mr_jaro "po jakimś czasie" tzn ile to tak optymalnie by było? Przy każdym requeście chyba nie ma sensu generowanie od nowa, ale np. co godzinę? dwie?
I poza tym to będzie w porządku i bezpieczne?

0

zależy jak bardzo bezpieczny ma być to system. Jakieś panele adminów to bym zrobił, że po godzinie wygasa i się nie odnawia, dla ludzi odnawiał bym co 24h

0

To nic wielkiego, na razie mały i prosty systemik, bez żadnych specjalnych funkcji i nic typu "administracyjnego".
Zastanawiam się jeszcze nad jedną rzeczą, mianowicie opcja typu "zapamiętaj mnie". Mógłbyś jakoś naprowadzić mnie jak to zrobić? Tokeny wygasają i są wysyłane do serwera tylko przy requeście, więc co powinienem zrobić, może np. zapisać jakiś losowy hash w ciasteczku i jednocześnie w bazie danych i jakoś to sprawdzać? Czy jak to powinno wyglądać?

0

prędzej w bazie

0

Tylko w bazie? To w jaki sposób wtedy ustalić, że to akurat do tego klienta który pyta należy hash z bazy potwierdzający ciągłe zalogowanie użytkownika?

0

w bazie trzymasz info, że dane id chce mieć sesje ciągła i wtedy odnawiasz dla takiego kogoś tokena.

0

Hm, okej, dzięki zobaczę co z tego wyjdzie. Na razie chyba wiem co potrzebuję, dziękuję obydwu panom za pomoc.

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