REST API dla 4programmers.net?

REST API dla 4programmers.net?
Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
6

W sumie to przywołuje @msm bo to on zarzucił temat :P


Pojawił się pomysł udostępnienia API dla 4programmers.net. Zakładam ten wątek, aby można było przedyskutować pewne tematy jak:

  1. Po co?
  2. Dla kogo?
  3. Jaki zakres funkcjonalności?
  4. Tylko do odczytu czy możliwość publikowania (np. wpisów mikrobloga czy w przyszłości ofert pracy?)

Zakładam, ze @msm miał tutaj na myśli konkretnie API do forum, aby warto by było założyć, że w przyszłości takie API byłoby rozbudowane o np. dział z ofertami pracy czy mikroblogami.

Zapraszam do dyskusji. Jak coś się tutaj wykluje to zbiorę to do kupy i pozakładam zadania na github.

edytowany 1x, ostatnio: Adam Boduch
msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
6

To skoro zostałem przywołany...

Pomysł się zrodził już jakiś czas temu, bo co najmniej kilka pytań o API do 4p widziałem (nawet w kontekscia aplikacji mobilnej).

A teraz coś się ruszyło, bo pewien użytkownik (@kq konkretnie) chciał napisać 4programmers.netowego bota do IRC (bot z tego co wiem już napisany i działa btw).

W każdym razie potrzebował funkcji pobierania najnowszych tematów na forum (żeby bot robił powiadomienia), i pierwszy pomysł to było parsowanie strony głównej forum w poszukiwaniu nowych tematów.
Jako że to jest chory pomysł (parsowanie HTMLa tylko po to żeby kilka pól wyciągnąć), stanęło na prostym API do tego (ostatnie 10 tematów w JSONie).

No i to testowe API stoi już i ma się dobrze (nie jest dostępne publicznie, bo to efektywnie hack na kolanie i ten wątek jest po to żeby ustalić co dalej, ale jeśli ktoś jest zainteresowany "na już" to można napisać PW).

To skoro background za nami, to jeszcze coś konstruktywnego odpowiem na pytania:

Po co?

Programiści to zazwyczaj kreatywne istoty, jeśli dać im taką możliwość to mogą zrobić coś przydatnego.
Use casów dla api jest masa, chociażby wspomniany bot do irca (ja kiedyś napisałem jeszcze inne api, i jeszcze bardziej na kolanie, do bota XMPPowego, ale to było dawno (jeszcze na poprzednim serwerze) a tamten bot w końcu nie ruszył nigdy).

Jaki zakres funkcjonalności?

Zakładam, ze @msm miał tutaj na myśli konkretnie API do forum, aby warto by było założyć, że w przyszłości takie API byłoby rozbudowane o np. dział z ofertami pracy czy mikroblogami.

Na pewno wątki i posty na forum (jak Adam napisał), bo to na razie najbardziej aktywna częśc 4p. W przyszłości inne działy też są opcją, ale trzeba się zastanowić które - takie np. API dla ofertów pracy by było przydatne gdyby ktoś się z nim integrował/go używał. Nie mam pojęcia jak wygląda sprawa API dla ofert pracy, kto wie, może jest jakiś standard :P.

Tylko do odczytu czy możliwość publikowania (np. wpisów mikrobloga czy w przyszłości ofert pracy?)

Na pewno możliwośc publikowania by dramatycznie zwiększyła przydatność takiego API. Tylko trzeba by się zastanowić nad bezpieczeństwem tego, bo nie chcemy żeby jakiś abuser za pomocą trzylinijkowego skryptu w javascripcie puszczonego w nocy dodał 500 tysięcy postów do bazy ;).

pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:28 dni
  • Lokalizacja:Kraków
  • Postów:1055
1

user image
@msm pewnie, że działa ;D


do not code, write prose
msm
:D. Ładne.
Webowiec
Co to, czaty 4p na tekstowej przeglądarce?? :P
pingwindyktator
Ech, serio? Poza tym - kilka ficzerów jest jeszcze w przygotowaniu.
0
msm napisał(a):

Jako że to jest chory pomysł (parsowanie HTMLa tylko po to żeby kilka pól wyciągnąć), stanęło na prostym API do tego (ostatnie 10 tematów w JSONie).

Nie to żebym się czepiał, ale do tego akurat to by chyba wystarczył rss, który jak widzę tu jest. Czyli xml a nie prasowanie strony.

Co do klienta mobilnego, to może być i nawet komunikować się przez te api restowe, tylko po co wymyślać koło na nowo zamiast dodać obsłigę taptalk?

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
0

Nie to żebym się czepiał, ale do tego akurat to by chyba wystarczył rss, który jak widzę tu jest. Czyli xml a nie prasowanie strony.

RSS sie generuje (nie wiem czemu w sumie) 500 ms, więc trzeba by go najpierw zoptymalizować. Ale racja, wystarczyłby (chociaż by był mniej wygodny), tylko mówilem o pierwszym pomyśle :P.

Odnośnie klienta mobilnego to nie twierdze żę to najlepszy sposób, tak tylko wspomniałem bo sobie przypomniałem o nim. Nie wiem w sumie co to taptalk, ale brzmi mądrze.

0

Taptalk to klient mobilny do forum. Mam wrażenie że już tu upominano się nie raz o obsługę taptalka

HO
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:21
0

Miałem napisać o tym trochę później, jak już zrobię w miarę używalną wersję, ale skoro poruszyliście tu ten temat... Piszę w ramach projektu do portfolio/nauki mobilną apkę 4programmers na Androida. Obecnie więcej funkcji nie ma niż jest, ale to bardzo wczesna wersja. Korzystam z parsowania HTML i działa dość dobrze. Myślę, że REST API mogłoby się bardzo przydać. Jeśli ktoś jest zainteresowany mogę napisać mikrobloga/temat na forum gdzie dokładniej opisze apkę, dodam screeny itp. Jest ktoś taki?

Tak btw.
Nie jestem tu nowy, śledzę to forum od dłuższego czasu, a nowe konto założyłem, bo trochę wstyd mi za stare posty i tematy napisane gdy dopiero zaczynałem naukę :D.

edytowany 1x, ostatnio: Hobbajt
Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
1

@Hobbajt: pewnie, pochwal się na mikroblogu. Tylko weź pod uwagę, że po wydaniu nowej wersji 4programmers.net, zmieni się struktura kodu HTML tak więc aplikacja przestanie działać poprawnie.

HO
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:21
0

Z tego co przeglądałem nową wersję, to zmienić będę musiał tylko kod odpowiadający za parsowanie. Struktura strony jest podobna do obecnej, więc nie powinno być źle :). Zauważyłem też kilka zmian, które trochę ułatwią parsowanie.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
0
Hobbajt napisał(a)

Jeśli ktoś jest zainteresowany mogę napisać mikrobloga/temat na forum gdzie dokładniej opisze apkę, dodam screeny itp. Jest ktoś taki?

Zamiast pytać się czy ktoś jest zainteresowany, weź po prostu załóż wątek w tym dziale lub w Oceny i recenzje :]


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
HO
napisałem już mikrobloga :)
flowCRANE
Ooo, faktycznie - przegapiłem ten wpis... ;)
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
1

jakby było rest api z wieloma funkcjonalnościami to byłoby mega. Napisałabym sobie bota. DAWAJCIE !!!


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
2

W takim razie można by było zachować obecną strukturę URL-i dla WWW i generować odpowiedź w JSON jeżeli odwołanie pochodziłoby do subdomeny api.4programmers.net. Czyli np.:

4programmers.net/Forum => Wersja HTML
api.4programmers.net/Forum => JSON

Podstawową trudność jaką widzę to to, że API powinno być wersjonowane. Czyli mielibyśmy adres: api.1-0.4programmers.net/Forum albo api.4programmers.net/1.0/Forum tak, aby ewentualnie zmiany nie powodowały, że nagle wywalą się aplikacje korzystające z API. No i oczywiście testy każdego kontrolera API.

bree
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 7 lat
  • Postów:40
0

A czy takie api mogłoby być wykorzystane do napisania "powiadamiacza" dla Firefoxa/Chrome?

somekind
@msm, odpowiedzi na temat wątku udzielamy w postach. Następne naruszenie tej reguły skończy się dla Ciebie banem.
bree
To się narobiło:D
msm
@somekind mam fajniejsze kolorki (edit: hm, jednak takie same. Wrapper deusa był lepszy.)
somekind
Twoja stara miesza bigos łokciem.
msm
A jednak nie takie same (B60016 vs B22222), honor uratowany.
Wizzie
@somekind 3:33 nie służy kulinarnym perwesjom
Marooned
No to ktoś srogo pojechał z tymi różnymi barwami. Widać na pierwszy rzut oka...
drorat1
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Krasnystaw
  • Postów:1181
0

Czy wypluwane przez API JSON-owe wyniki będą zbliżone (a może też w 100% zgodne) ze specyfikacją określoną tutaj?

http://jsonapi.org/

Czy też może według własnej specyfikacji?

Prawdę mówiąc to json-api pod linkiem wyżej wygląda dość ciekawie, nawet są i biblioteki do PHP na githubie, więc co o tym sądzicie?

Idąc dalej, w jakiej postaci będą zabezpieczenia? API key dla programisty (md5, sha1), Basic Authentication, Digest Authentication czy coś innego?

Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
0
drorat1 napisał(a):

Czy wypluwane przez API JSON-owe wyniki będą zbliżone (a może też w 100% zgodne) ze specyfikacją określoną tutaj?

http://jsonapi.org/

Czy też może według własnej specyfikacji?

Właściwie to nie wiem... dla mnie wygląda ok. Jakieś opinie przeciw?

drorat1
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Krasnystaw
  • Postów:1181
0

Niczego tu w zasadzie nie sugeruję. Ale dość dobrze opracowane bo np: to:

Kopiuj
GET /articles?page[number]=3&page[size]=1 HTTP/1.1

HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
  "meta": {
    "total-pages": 13
  },
  "data": [
    {
      "type": "articles",
      "id": "3",
      "attributes": {
        "title": "JSON API paints my bikeshed!",
        "body": "The shortest article. Ever.",
        "created": "2015-05-22T14:56:29.000Z",
        "updated": "2015-05-22T14:56:28.000Z"
      }
    }
  ],
  "links": {
    "self": "http://example.com/articles?page[number]=3&page[size]=1",
    "first": "http://example.com/articles?page[number]=1&page[size]=1",
    "prev": "http://example.com/articles?page[number]=2&page[size]=1",
    "next": "http://example.com/articles?page[number]=4&page[size]=1",
    "last": "http://example.com/articles?page[number]=13&page[size]=1"
  }
}

I można sobie stronicować wyniki w JSON z użyciem linków albo pobierać i wszystkie, robiłem coś wg. tego i naprawdę fajne rozwiązanie i fajnie to działa.

No i to:

Kopiuj
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/vnd.api+json

{
  "errors": [
    {
      "status": "422",
      "source": { "pointer": "/data/attributes/first-name" },
      "title":  "Invalid Attribute",
      "detail": "First name must contain at least three characters."
    }
  ]
}

Czyli w przypadku wystąpienia błędu są jasne informacje czego to dotyczy.

Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
2

Odświeżam wątek. Czyli podsumowując założenia:

panryz
Jest jakaś wersja developerska tego API?
Adam Boduch
nie, jeszcze żadne prace w związku z tym nie zostały dokonane
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 7 godzin
  • Lokalizacja:Poznań
0

Nie miałem jeszcze styczności, ale "mówi się" [citation needed], że http://graphql.org/ to "następca" REST i nie ma potrzeby wersjonowania przy rozwoju. Może jest tu jakiś spec, który potwierdzi bądź zaprzeczy i ogólnie wypowie się w temacie czy warto, czy jednak zostać przy wersji klasycznej?


Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
0
Marooned napisał(a):

Nie miałem jeszcze styczności, ale "mówi się" [citation needed], że http://graphql.org/ to "następca" REST i nie ma potrzeby wersjonowania przy rozwoju. Może jest tu jakiś spec, który potwierdzi bądź zaprzeczy i ogólnie wypowie się w temacie czy warto, czy jednak zostać przy wersji klasycznej?

Podbijam temat w związku z pytaniem zadanym przez @Marooned. Robimy REST API czy GraphQL API? Jednak GraphQL to wciąż nowość, REST istnieje już od lat.

Marooned
Póki co gdziekolwiek trafiam na API, to nadal REST. Może GraphQL to bardziej promocja póki co niż realne użycie(?).
Adam Boduch
utworzyłem nowy wątek poza działem coyote: REST API vs GraphQL. Co wybrać?
marcio
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 dni
0

Czesc czy prace nad publicznym api stoja w miejscu lub jest juz cos?

Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:około 17 godzin
  • Postów:11948
1

Niestety stoją w miejscu, ale jesteśmy otwarci na pomoc w tej kwestii :))

Zobacz pozostały 1 komentarz
Adam Boduch
Tak, jest zaczęte lecz póki co tylko bardzo mały fragmencik został napisany przez @msm (kod potrzebny był do integracji czatu).
panryz
A można byłoby napisać osobną aplikację w innej technologii?
Aryman1983
Aryman1983
Też mnie to ciekawi.
Adam Boduch
Z racji tego, że cierpimy na braki kadrowe nie można za bardzo wybrzydzać ;) Aczkolwiek w PHP są już gotowe metody do wyciągania danych z bazy danych więc część kodu jest już gotowa. A jaką technologię masz na myśli?
panryz
na razie podpytuję. Domyślam się, że nowa aplikacja musiałaby mieć osobny connector do bazy, musiałaby znać jej strukturę i żyć niezależnie od tej phpowej. Problem pojawi się, kiedy coś się zmieni w bazie to trzeba będzie pamiętać o tym. że trzeba będzie to zmieniać w 2 miejscach.
msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
0

Zaczęły się dawno temu, ale z powodów technicznych stanęły i nie zanosi się żeby poszły do przodu :P. Ale jak ktoś napisze...

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)