• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    NYXnyx :: API
    GIOMIKY
    GIOMIKY --- ---
    Ahoj všichni,
    tak jsem se podíval na alphu, co to dává za jsony. U některých stránek, které mi odpověděly na první pokus jsem je v graphvizu vyrendroval.
    Nevím, jestli je to správně, ale něco mi to zobrazilo.
    https://bh.xf.cz/pub/nyx2/
    Jestli bude čas, tak na to ještě můžu kouknout.
    Přikládám, jak vypadá například https://alpha.nyx.cz/api/bookmarks/all
    Tak ať se Nyx II v roce MMXXI daří.

    NYX
    NYX --- ---
    VIRTUALVOID: Snad jo, az zacne fungovat ten automaticky generator :)
    VIRTUALVOID
    VIRTUALVOID --- ---
    NYX: bude k tomu swagger / openapi ? alebo aspon wiki ?
    NYX
    NYX --- ---
    GIOMIKY: Prepisovani imho zas tak moc ne, ted se pouziva jen par veci, ktere maji nejaky svuj ekvivalent...zbytek je novy a pouzit se nemusi.
    GIOMIKY
    GIOMIKY --- ---
    NYX: hmm... ok... to bude docela dost prepisovani v klientech... ;D
    NYX
    NYX --- ---
    GIOMIKY: Zacnu dokumentovat co nejdriv, zatim ciste dump z toho co tam je:

    GET /api/gate
    GET /api/activity/<username>
    GET /api/people/active
    GET /api/people/active_friends
    GET /api/people/settings?<filter..>
    POST /api/profile/reference_reply/<reply_username>
    GET /api/icon/<username>
    GET /api/icon/<username>/discussion/<discussion_id>
    DELETE /api/profile/delete_token/<token>
    GET /api/mail
    GET /api/mail?<filter..>
    GET /api/mail/unread/<username>
    GET /api/mail/reminders
    POST /api/mail/send
    GET /api/mail/summary
    DELETE /api/mail/delete/<id>
    DELETE /api/mail/delete_unread/<id>
    POST /api/mail/reminder/<id>/<new_state>
    GET /api/notifications
    GET /api/bookmarks
    GET /api/bookmarks?<q..>
    GET /api/bookmarks/all
    GET /api/bookmarks/history
    GET /api/bookmarks/history/more
    GET /api/bookmarks/reminders
    POST /api/event/<discussion_id>/attendance/<new_state>
    POST /api/event/<did>/key_photo/<fid>
    GET /api/events?<q..>
    POST /api/events/location/<area_id>/<state>
    GET /api/market?<q..>
    GET /api/market/mine
    POST /api/market/<did>/state/<new_state>
    GET /api/market/<discussion_id>/parameters/<category_id>
    GET /api/discussion/<discussion_id> [2]
    GET /api/discussion/<discussion_id>?<filter..>
    GET /api/discussion/<discussion_id>/single/<id>
    GET /api/discussion/<discussion_id>/id/<id>/replies
    POST /api/discussion/rights?<q..>
    POST /api/discussion/rights/days_left?<q..>
    DELETE /api/discussion/rights?<q..>
    DELETE /api/discussion/<discussion_id>/delete/<id>
    POST /api/discussion/<discussion_id>/reminder/<id>/<new_state>
    POST /api/discussion/<discussion_id>/rating/<id>/<action>
    GET /api/discussion/<discussion_id>/rating/<id>
    POST /api/discussion/<discussion_id>/send/text
    GET /api/discussion/<discussion_id>/poll/<post_id>/results
    GET /api/discussion/<discussion_id>/content/poll/<content_id>/results
    POST /api/discussion/<discussion_id>/poll/<post_id>/vote/<answer_ids>
    POST /api/discussion/<discussion_id>/content/poll/<content_id>/vote/<answer_ids>
    POST /api/discussion/<discussion_id>/poll/<post_id>/finish
    POST /api/discussion/<discussion_id>/content/poll/<content_id>/finish
    POST /api/discussion/<discussion_id>/dice/<post_id>/roll
    POST /api/discussion/<discussion_id>/content/dice/<content_id>/roll
    POST /api/discussion/<discussion_id>/registration/<post_id>/confirm
    POST /api/discussion/<discussion_id>/discussion_create_request/<post_id>/vote_for
    POST /api/discussion/<discussion_id>/discussion_create_request/<post_id>/vote_against
    POST /api/discussion/<_discussion_id>/discussion_create_request/<post_id>/confirm
    POST /api/discussion/<_discussion_id>/discussion_create_request/<post_id>/cancel
    GET /api/last/discussions
    GET /api/last?<q..>
    GET /api/last
    GET /api/last/min_rating/<min_rating>
    GET /api/last/rated_by_friends
    PUT /api/file/upload
    DELETE /api/file/delete/<id>
    POST /api/file/embed/<id>/<state>
    GET /api/search/username/<username>
    GET /api/search/unified?<search>&<limit>
    GET /api/topics/category_for_dropdown/<domain_id>
    POST /api/create_token/<username>
    POST /api/register_for_notifications/<token>/<client>/<client_token>
    NYX
    NYX --- ---
    GIOMIKY: jj, viz nize

    Slušná část endpointů je dostupná čistě přidáním /api na začátek cesty, tj. z /mail se udělá /api/json a hurá, JSON. Jen někde dávalo smysl udělat nějaký custom, který akceptuje parametry v nějaké smysluplnější podobě.
    GIOMIKY
    GIOMIKY --- ---
    NYX: Super, uz jsem stahnul postu... prikladam zakladni pouziti v php ... akorat by se casem hodilo, jake funkce to ma... ale vsiml jsem si, ze ty url na alpha jsou asi strukturovany podobne jako API?



    NYX
    NYX --- ---
    GIOMIKY: Moje blbost :)
    GIOMIKY
    GIOMIKY --- ---
    NYX: :-) Aha... moje chyba, generoval jsem tokeny tobe
    (https://alpha.nyx.cz/api/create_token/NYX)
    a ne https://alpha.nyx.cz/api/create_token/UZIVATEL
    Myslel jsem, ze to Nyx je jako jmeno aplikace, pro kterou generuju ... sorry

    NYX
    NYX --- ---
    NYX: Samozrejme se svym nickem :) Takze

    curl --location --request POST 'https://alpha.nyx.cz/api/create_token/GIOMIKY'
    GIOMIKY
    GIOMIKY --- ---
    NYX: O.K. zatim mam pocit na alpha jeste neuplne funguje autorizace api... nejak jsem nenasel, kam zadat autorizacni kod. Muzu si vytvorit rucne, pojmenovat. Ale chce to heslo do Nyxu a ne autorizacni kod. Nevim, jestli to neni featura...
    NYX
    NYX --- ---
    SH_PANDA: Ja se bojim, ze se mi to casem rozjede, proto jsem koukal po nejakem generatoru. A existuje neco, co bere v potaz i custom serializacni anotace, tak mi to prislo idealni.
    SH_PANDA
    SH_PANDA --- ---
    NYX: ja udrzuju u nas k aplikaci rucne open api spec a neni to az takovej vopruz jak by se zdalo. idea + nejaky openapi plugin
    NYX
    NYX --- ---
    Takže už je to venku, proč se to API bude měnit, tak nějaké detaily.

    Nový Nyx je napsaný tak, že je extrémně snadné vyklopit do JSONu data, která by normálně šla do šablony, tj. endpointy poměrně věrně zrcadlí jednotlivé stránky Nyxu samotného. Přijde mi to pro účely Nyxu smysluplnější než nějaké "skutečně" REST/GraphQL api. Slušná část endpointů je dostupná čistě přidáním /api na začátek cesty, tj. z /mail se udělá /api/json a hurá, JSON. Jen někde dávalo smysl udělat nějaký custom, který akceptuje parametry v nějaké smysluplnější podobě.

    Úpravy ze starého API by měly být poměrně snadné, změnit endpointy + parametry a popasovat se s novou strukturou toho, co přijde zpět + drobné změny v tom, jak chodí zpět textový obsah (trochu jinak chodí obrázky apod.).

    Chtěl jsem mít k dispozici rovnou i automaticky generovanou OpenAPI dokumentaci pro Swagger a spol., ale je teď nějaká nekonzistence mezi frameworkem a generátorem a nepodařilo se mi to zatím zprovoznit, tak snad časem :-/

    Velka cast API tam funguje uz ted, takze zacnu nejak dokumentovat rucne. Brzo dam na nastenku nejaky dokument, zatim tam dam aspon popis jak se prihlasit :-)
    LUCIEN
    LUCIEN --- ---
    LUCIEN: Pardon. Vrací, ale nechtěl jsem to používat protože to u některých klubů vrací poměrně velký HTML. Ale asi lepší než to cachovat u sebe.
    LUCIEN
    LUCIEN --- ---
    To jsem si myslel :/ Cachovat to muzu, ale je to takove volake... budu s tim mit vic problemu nez uzitku. Prekvapilo me, ze ten endpoint pro vraceni nastenky nevraci i zakladni info o klubu...
    NYX
    NYX --- ---
    NYX: Teoreticky si muzes cachovat nazvy diskuzi u sebe. Ale nebude to 100%
    NYX
    NYX --- ---
    LUCIEN: Nic me ted nenapada :-/
    Kliknutím sem můžete změnit nastavení reklam