Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #16030 > unrolled thread

Serwer REST

Started byRoman Tyczka <noemail@because.no>
First post2019-01-28 14:44 +0100
Last post2019-01-29 15:45 +0100
Articles 11 — 4 participants

Back to article view | Back to pl.comp.lang.php


Contents

  Serwer REST Roman Tyczka <noemail@because.no> - 2019-01-28 14:44 +0100
    Re: Serwer REST Marek S <precz@spamowi.com> - 2019-01-28 21:49 +0100
      Re: Serwer REST Roman Tyczka <noemail@because.no> - 2019-01-29 09:07 +0100
        Re: Serwer REST Marek S <precz@spamowi.com> - 2019-01-29 22:04 +0100
          Re: Serwer REST Roman Tyczka <noemail@because.no> - 2019-01-30 08:33 +0100
      Re: Serwer REST Wojciech Bancer <wojciech.bancer@gmail.com> - 2019-01-29 09:42 +0100
        Re: Serwer REST Borys Pogoreło <borys@pl.edu.leszno> - 2019-01-29 15:48 +0100
    Re: Serwer REST Wojciech Bancer <wojciech.bancer@gmail.com> - 2019-01-29 09:33 +0100
      Re: Serwer REST Roman Tyczka <noemail@because.no> - 2019-01-29 11:58 +0100
        Re: Serwer REST Wojciech Bancer <wojciech.bancer@gmail.com> - 2019-01-29 13:05 +0100
        Re: Serwer REST Borys Pogoreło <borys@pl.edu.leszno> - 2019-01-29 15:45 +0100

#16030 — Serwer REST

FromRoman Tyczka <noemail@because.no>
Date2019-01-28 14:44 +0100
SubjectSerwer REST
Message-ID<1t1f1d2pfc90d.dlg@tyczka.com>
Witam,

Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
odczytujących i zapisujących coś do bazy. 
Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?

-- 
pozdrawiam
Roman Tyczka

[toc] | [next] | [standalone]


#16031

FromMarek S <precz@spamowi.com>
Date2019-01-28 21:49 +0100
Message-ID<q2nptj$i5b$1@node1.news.atman.pl>
In reply to#16030
W dniu 2019-01-28 o 14:44, Roman Tyczka pisze:
> Witam,
> 
> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
> odczytujących i zapisujących coś do bazy.
> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?

A po co Ci to? REST jest tak banalny, że nie potrzebuje żadnego serwera. 
Sadzasz skrypt PHP pod danym URL, który odpowiada JSON'em zapytany 
również JSON'em i pozamiatane. Do bazy danych też potrzebujesz jakiś 
bibliotek??? Przecież to parę linijek kodu w natywnym PHP.

Jeśli zamiast opanować podstawy PHP chcesz korzystać od razu z 
frameworków, bibliotek, to szczerze mówiąc więcej będziesz tracił na tym 
czasu. Nie wspomnę o tym, że nigdy nie nauczysz się programowania w ten 
sposób.

-- 
Pozdrawiam,
Marek

[toc] | [prev] | [next] | [standalone]


#16032

FromRoman Tyczka <noemail@because.no>
Date2019-01-29 09:07 +0100
Message-ID<4tbtumqdtp7y.dlg@tyczka.com>
In reply to#16031
On Mon, 28 Jan 2019 21:49:54 +0100, Marek S wrote:

>> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
>> odczytujących i zapisujących coś do bazy.
>> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?
> 
> A po co Ci to? REST jest tak banalny, że nie potrzebuje żadnego serwera. 
> Sadzasz skrypt PHP pod danym URL, który odpowiada JSON'em zapytany 
> również JSON'em i pozamiatane. 

Niby tak, a jednak nie do końca. Po co mam zajmować się parsowaniem
requesta? Serializacją odpowiedzi, itd.? Tym wszystkim może się zająć jakaś
biblioteka, a ja skupię się na meritum problemu. Pisanie za każdym razem
tego samego od podstaw jest nieporozumieniem.

Znalazłem takie coś i chyba mi wystarczy:

https://github.com/jacwright/RestServer

choć pytam, bo może jest coś bardziej popularnego.

> Do bazy danych też potrzebujesz jakiś 
> bibliotek??? Przecież to parę linijek kodu w natywnym PHP.

Oczywiście, że używam PDO a nie rzeźbię ręcznie po drajwerze DB, nawet mi
się nie chce wyliczać zalet. Dziwią mnie takie pytania od programisty.

> Jeśli zamiast opanować podstawy PHP chcesz korzystać od razu z 
> frameworków, bibliotek, to szczerze mówiąc więcej będziesz tracił na tym 
> czasu. 

Czas stracony na poznanie bibliotek i frameworków, całkiem rzeczywiście
spory, zwróci się z nawiązką po kilku projektach. 
Poza tym, gdy dostanie się do poprawy projekt z zewnątrz to gdy jest on
napisany na bazie jakichś frameworków to da się go ogarnąć, gdy się je zna.
Gdy zaś jest to wytwór czyjejś wyobraźni i wydajemisia to... nie życzę
takiego masochizmu.

> Nie wspomnę o tym, że nigdy nie nauczysz się programowania w ten 
> sposób.

Programowania jako takiego uczyć się nie muszę, bo już w życiu się sporo
napisałem, a właśnie poznanie ekosystemu każdego z języków, czy to PHP
(właśnie rozkminiam Composera) czy to JS jest czasochłonne i kluczowe, bo
to odróżnia języki, a nie sama składnia, która w językach imperatywnych
jest bardzo podobna.

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#16039

FromMarek S <precz@spamowi.com>
Date2019-01-29 22:04 +0100
Message-ID<q2qf5o$cqh$1@node2.news.atman.pl>
In reply to#16032
W dniu 2019-01-29 o 09:07, Roman Tyczka pisze:

> Niby tak, a jednak nie do końca. Po co mam zajmować się parsowaniem
> requesta? Serializacją odpowiedzi, itd.? Tym wszystkim może się zająć jakaś
> biblioteka, a ja skupię się na meritum problemu. Pisanie za każdym razem
> tego samego od podstaw jest nieporozumieniem.

Parsowanie to 1 linijka kodu przecież!
http://php.net/manual/pl/function.json-decode.php

Dostęp do bazy, to niewiele więcej.

Właśnie dlatego napisałem, że podstawami PHP powinieneś się zająć. 
Zabierasz się za temat od końca.

> https://github.com/jacwright/RestServer
> 
> choć pytam, bo może jest coś bardziej popularnego.

Pewnie jest, ale to wygląda tak jakbyś dzwonił do zarządu Coca-Coli z 
zapytaniem czy mają otwieracz do ich butelek.

> Oczywiście, że używam PDO a nie rzeźbię ręcznie po drajwerze DB, nawet mi
> się nie chce wyliczać zalet. Dziwią mnie takie pytania od programisty.

Chyba zaczynam rozumieć dlaczego aż tylu developerów PHP w firmie, w 
jakiej pracuję jest odsiewanych. Nie kumają co to SQL, klucz obcy, 
trigger, indeks, polimorfizm, klasa abstrakcyjna i takie tam. Trzepią 
aplikacje na frameworkach i nie kumają świata. Wystąpi problem np. z 
wydajnością i jest wielkie "ojej".

Aby używać frameworków należy rozumieć podstawy. Zamiast ładowania 
pierdyliona bibliotek czasem wystarczy jedna linijka kodu w PHP czy JS.

> Czas stracony na poznanie bibliotek i frameworków, całkiem rzeczywiście
> spory, zwróci się z nawiązką po kilku projektach.

Jasne, ale warto pomyśleć o emeryturze. Zrobisz parę szablonowych 
sklepów nie rozumiejąc jak działają i co dalej?

Dobra, nie moja sprawa. Zapędziłem się.

> Programowania jako takiego uczyć się nie muszę, bo już w życiu się sporo
> napisałem, a właśnie poznanie ekosystemu każdego z języków, czy to PHP
> (właśnie rozkminiam Composera)

Composer, to jedna z podstaw poziomu #2, gdy ogarnie się #1.

Poradziłem Ci zgodnie z moim sumieniem. Nie chcę Cię nakłaniać do 
niczego. Rób jak chcesz.

-- 
Pozdrawiam,
Marek

[toc] | [prev] | [next] | [standalone]


#16040

FromRoman Tyczka <noemail@because.no>
Date2019-01-30 08:33 +0100
Message-ID<npxkoiuu2lgn.dlg@tyczka.com>
In reply to#16039
On Tue, 29 Jan 2019 22:04:54 +0100, Marek S wrote:

>> Niby tak, a jednak nie do końca. Po co mam zajmować się parsowaniem
>> requesta? Serializacją odpowiedzi, itd.? Tym wszystkim może się zająć jakaś
>> biblioteka, a ja skupię się na meritum problemu. Pisanie za każdym razem
>> tego samego od podstaw jest nieporozumieniem.
> 
> Parsowanie to 1 linijka kodu przecież!
> http://php.net/manual/pl/function.json-decode.php

Nie chodziło o parsowanie JSOna tylko tak ja napisał Wojtek, parsowanie
parametrów.
 
> Dostęp do bazy, to niewiele więcej.
> 
> Właśnie dlatego napisałem, że podstawami PHP powinieneś się zająć. 
> Zabierasz się za temat od końca.

Ale ja to umiem, tylko to są czasochłonne banały i chcę optymalizować czas. 
 
>> https://github.com/jacwright/RestServer
>> 
>> choć pytam, bo może jest coś bardziej popularnego.
> 
> Pewnie jest, ale to wygląda tak jakbyś dzwonił do zarządu Coca-Coli z 
> zapytaniem czy mają otwieracz do ich butelek.

Kto jest tym zarządem coca-coli, bo nie chwytam analogii?
 
>> Oczywiście, że używam PDO a nie rzeźbię ręcznie po drajwerze DB, nawet mi
>> się nie chce wyliczać zalet. Dziwią mnie takie pytania od programisty.
> 
> Chyba zaczynam rozumieć dlaczego aż tylu developerów PHP w firmie, w 
> jakiej pracuję jest odsiewanych. Nie kumają co to SQL, klucz obcy, 
> trigger, indeks, polimorfizm, klasa abstrakcyjna i takie tam. Trzepią 
> aplikacje na frameworkach i nie kumają świata. Wystąpi problem np. z 
> wydajnością i jest wielkie "ojej".

Ale Ty nie czytasz uważnie. Ja nie jestem na etapie "uczę się
programowania" tylko "poznaję środowisko PHP i JS". Jestem też autorem
wielu innych aplikacji, w tym serwera RESTowego na którym działa wiele
mikroserwisów i tam optymalizacja jest na pierwszym miejscu. Tam też
podpięte jest kilka niezależnych baz i wyobraź sobie używam SQLa, którego
zresztą używam od blisko 20 lat.
 
> Aby używać frameworków należy rozumieć podstawy. Zamiast ładowania 
> pierdyliona bibliotek czasem wystarczy jedna linijka kodu w PHP czy JS.

Gdy wystarczy jedna linijka tak robię, tu nie wystarczy.
 
>> Czas stracony na poznanie bibliotek i frameworków, całkiem rzeczywiście
>> spory, zwróci się z nawiązką po kilku projektach.
> 
> Jasne, ale warto pomyśleć o emeryturze. Zrobisz parę szablonowych 
> sklepów nie rozumiejąc jak działają i co dalej?

Skąd załóżenie, że nie rozumiem jak to działa??
 
> Dobra, nie moja sprawa. Zapędziłem się.

Troszkę tak.
 
>> Programowania jako takiego uczyć się nie muszę, bo już w życiu się sporo
>> napisałem, a właśnie poznanie ekosystemu każdego z języków, czy to PHP
>> (właśnie rozkminiam Composera)
> 
> Composer, to jedna z podstaw poziomu #2, gdy ogarnie się #1.

Łatwiej się ogarnia pierwszy, gdy Composera się umie używać. Tak samo w JS
łatwiej pisać modułowo i przejrzyście, gdy używasz bundlepackera, itd.
 
> Poradziłem Ci zgodnie z moim sumieniem. Nie chcę Cię nakłaniać do 
> niczego. Rób jak chcesz.

Dzięki.

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#16034

FromWojciech Bancer <wojciech.bancer@gmail.com>
Date2019-01-29 09:42 +0100
Message-ID<slrnq504fj.25n9.wojciech.bancer@pl-test.org>
In reply to#16031
On 2019-01-28, Marek S <precz@spamowi.com> wrote:

[...]

>> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
>> odczytujących i zapisujących coś do bazy.
>> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?
>
> A po co Ci to? REST jest tak banalny, że nie potrzebuje żadnego serwera. 
> Sadzasz skrypt PHP pod danym URL, który odpowiada JSON'em zapytany 
> również JSON'em i pozamiatane.

1/ A co z parsowaniem parametrów z URLa? (np. /products, /products/{id}, /products/{id}/status)
2/ Co z walidowaniem całych obiektów JSONowych?
3/ Co z rozróżnianiem metod zapytań (GET/POST/PUT/DELETE) i routingu?
4/ Co z definiowaniem reguł CORS?
5/ Co z ew. obsługą autoryzacji użytkownika (choćby tokenem)?

To wszystko podpada pod "prosty REST".

> Do bazy danych też potrzebujesz jakiś 
> bibliotek??? Przecież to parę linijek kodu w natywnym PHP.

Zmieść się w 100 linijkach kodu z walidacją i parsowaniem routingu
(i wyciąganiem parametrów z URLa). I dare you.

> Jeśli zamiast opanować podstawy PHP chcesz korzystać od razu z 
> frameworków, bibliotek, to szczerze mówiąc więcej będziesz tracił na tym 
> czasu. Nie wspomnę o tym, że nigdy nie nauczysz się programowania w ten 
> sposób.

Implementacja takich funkcji nie uczy języka, tylko uczy korzystania 
z funkcji wbudowanych.

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com

[toc] | [prev] | [next] | [standalone]


#16038

FromBorys Pogoreło <borys@pl.edu.leszno>
Date2019-01-29 15:48 +0100
Message-ID<179yymq0py1ez$.emuq12mccbgq.dlg@40tude.net>
In reply to#16034
Dnia Tue, 29 Jan 2019 09:42:21 +0100, Wojciech Bancer napisał(a):

>> Do bazy danych też potrzebujesz jakiś 
>> bibliotek??? Przecież to parę linijek kodu w natywnym PHP.
> 
> Zmieść się w 100 linijkach kodu z walidacją i parsowaniem routingu
> (i wyciąganiem parametrów z URLa). I dare you.

Oj tam, dobry regexp i jeszcze zostanie trochę linijek na komentarze ;)

-- 
Borys Pogoreło
borys(#)leszno,edu,pl

[toc] | [prev] | [next] | [standalone]


#16033

FromWojciech Bancer <wojciech.bancer@gmail.com>
Date2019-01-29 09:33 +0100
Message-ID<slrnq503uh.25n9.wojciech.bancer@pl-test.org>
In reply to#16030
On 2019-01-28, Roman Tyczka <noemail@because.no> wrote:

[...]

> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
> odczytujących i zapisujących coś do bazy. 
> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?

To jest teraz na topie:
https://api-platform.com/

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com

[toc] | [prev] | [next] | [standalone]


#16035

FromRoman Tyczka <noemail@because.no>
Date2019-01-29 11:58 +0100
Message-ID<1jylb29ds7hxx.dlg@tyczka.com>
In reply to#16033
On Tue, 29 Jan 2019 09:33:20 +0100, Wojciech Bancer wrote:

>> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
>> odczytujących i zapisujących coś do bazy. 
>> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?
> 
> To jest teraz na topie:
> https://api-platform.com/

Dzięki, wygląda interesująco, ale to jest raczej olbrzymi kombajn a nie
mały cusiek do rozkminy w kilka godzin. Zapisuje do zakładek i będę powoli
trawił, ale na już czegoś małego potrzebuję, chyba wezmę to co sam
znalazłem na razie.

ps. dzięki Twojemu linkowi dowiedziałem się o GraphiQLu, bardzo fajna
sprawa! Muszę się temu przyjrzeć bliżej, bo to rewolucjonizuje tematykę
API, i uzdrawia, bo REST jednak jest trochę przegadany.

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#16036

FromWojciech Bancer <wojciech.bancer@gmail.com>
Date2019-01-29 13:05 +0100
Message-ID<slrnq50gcs.29i4.wojciech.bancer@pl-test.org>
In reply to#16035
On 2019-01-29, Roman Tyczka <noemail@because.no> wrote:
> On Tue, 29 Jan 2019 09:33:20 +0100, Wojciech Bancer wrote:
>
>>> Potrzebuję w PHP wystawić prościutkie API restowe, kilka metod
>>> odczytujących i zapisujących coś do bazy. 
>>> Jakiej biblioteki PHP użyć bym nie stracił na to kilku dni uczenia?
>> 
>> To jest teraz na topie:
>> https://api-platform.com/
>
> Dzięki, wygląda interesująco, ale to jest raczej olbrzymi kombajn a nie
> mały cusiek do rozkminy w kilka godzin. Zapisuje do zakładek i będę powoli
> trawił, ale na już czegoś małego potrzebuję, chyba wezmę to co sam
> znalazłem na razie.

Z takiego pobieżnego "rzutu okiem", to goły Symfony ma podobną funkcjonalność, np.:

/**
 * @Route("/api")
 */
class ApiController
{
    /**
     * @Route("/study/{study}/report/{report}", methods={"GET"}, defaults={"_format"="json"})
     */
    public function getReportDetails(Study $study, StudyReport $report)
    {
        // .../

        return new JsonResponse([
            'status' => 'ok',
            'data' => $report->getSelectedData(),
            'options' => $report->getOptions()
        ]);
    }
}

a obiekt wysłany POSTem możesz pobrać przez:

$data = json_decode($request->getContent(), true);

i dalej potraktować np. albo przez json schema validator,
albo przez walidatory wbudowane w symfony (czyli stworzenie
klasy FormType).

CORS załatwia:
https://github.com/nelmio/NelmioCorsBundle
(albo ustawienia serwera).

Przy czym warto pamiętać, że jak chcesz obsługiwać ruch z frameworków,
to one często wysyłają najpierw na ten sam URL request z metodą OPTION,
zeby właśnie zweryfikować CORSy. :)

-- 
Wojciech Bańcer
wojciech.bancer@gmail.com

[toc] | [prev] | [next] | [standalone]


#16037

FromBorys Pogoreło <borys@pl.edu.leszno>
Date2019-01-29 15:45 +0100
Message-ID<1q4m411ptlzrw$.1or4mj5nyxzig.dlg@40tude.net>
In reply to#16035
Dnia Tue, 29 Jan 2019 11:58:27 +0100, Roman Tyczka napisał(a):

> ps. dzięki Twojemu linkowi dowiedziałem się o GraphiQLu, bardzo fajna
> sprawa! Muszę się temu przyjrzeć bliżej, bo to rewolucjonizuje tematykę
> API, i uzdrawia, bo REST jednak jest trochę przegadany.

Raczej zbyt prymitywny, a jest traktowany jako jedyne słuszne rozwiązanie
(zresztą, o samą definicję REST też można się kłócić). GraphQL to super
sprawa, ale w zasadzie sensowna tylko do odczytu danych. Mutacje są tam
potraktowane bardzo po macoszemu.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.lang.php


csiph-web