ahushh / monaba

Imageboard engine written in Haskell and powered by Yesod

Home Page:https://haibane.ru

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

API

catamphetamine opened this issue · comments

Здравствуйте.
Я просто проходил мимо.
Уютный проект, а что по API?
Я поискал через Ctrl + F, не нашлось.
Если есть чё, то можно было бы прикрутить вот этот GUI:
https://github.com/catamphetamine/chanchan

Так, я понял, "Not under active development".
Ну вообще да, пять лет уже, так долго проекты не живут.
Есть какой-то lynxchan, но я его не смотрел.
Он на Node.js и MongoDB, хотя чанам база данных, наверное, не нужна, и прямо в файлы писать будет быстрее (я так предполагаю).
Иначе почему 2ch.hk грузится молниеносно.

@catamphetamine апи есть в зачаточном состоянии, почти не протестировано и скорее всего будет меняться еще.
Список роутов вот, там внизу самом https://github.com/ahushh/Monaba/blob/docker/monaba/config/routes

Я в принципе и планировал в ближайшее время его доделать и сваять доку. Появление клиента для этого апи будет приятным бонусом.

Список роутов вот, там внизу самом

Ага, вижу.

/api/posts                             ApiPostR PUT
/api/posts/#Int                        ApiPostByIdR GET PATCH

/api/boards                            ApiListBoardsR GET
/api/boards/#Text/page/#Int            ApiBoardR GET
/api/boards/#Text/threads/#Int         ApiThreadR GET
/api/boards/#Text/threads/#Int/deleted ApiDeletedPosts GET

/api/feed/page/#Int                    ApiFeedR GET
/api/catalog/#Text                     ApiCatalogR GET
/api/home                              ApiHomeR GET
/api/captcha                           ApiCaptchaR GET
/api/file                              ApiFileR PUT

Плюс, ещё, видимо, эти:

/ajax/post/preview                AjaxPostPreviewR  POST
/ajax/postform/#Text              AjaxGetPostFormR  GET
/ajax/thread/#Text/#Int/new/#Int  AjaxNewPostsR     GET
/ajax/thread/#Text/#Int/last/#Int AjaxLastPostsR    GET
/ajax/thread/#Text/#Int/all       AjaxAllPostsR     GET
/ajax/thread/#Text/#Int/deleted   AjaxDeletedPostsR GET
/ajax/postbyid/#Int               AjaxPostByIdR     GET
/ajax/post/#Text/#Int             AjaxPostR         GET
/ajax/post/#Text/#Int/rawmsg      AjaxPostRawMsgR   GET
/ajax/feed/#Int                   AjaxFeedOffsetR   GET
/ajax/newfeed/#Int                AjaxNewFeedR      GET
/ajax/hide/thread/#Text/#Int/#Int AjaxHideThreadR   GET
/ajax/unhide/thread/#Text/#Int    AjaxUnhideThreadR GET
/ajax/board/stats                 AjaxBoardStatsR   GET
/ajax/board/stats/read            AjaxBoardStatsReadR GET
/jsonfrommsg/#Text                JsonFromMsgR      GET

Я в принципе и планировал в ближайшее время его доделать и сваять доку.

@ahushh А я тут тоже, клиент допиливать планировал к лету.

Как вообще ваш движок по производительности?
Это по сути самое основное, я так полагаю, для больших досок.
Если на имиджборде сидит много человек, то нагрузка большая. Если же это небольшое сообщество, то без разницы.
Я так понял, 2ch.hk вообще просто пишет всё прямо в файлы (*.html и *.json), потому что грузится он у меня за 12 миллисекунд (что API, что страницы).
Да и расширения в путях как бы намекают.
Видимо, старый-добрый подход начала 90-ых здесь — самый оптимальный.

Появление клиента для этого апи будет приятным бонусом.

Даа, по планам сейчас допилить GUI до юзабельного состояния (мб летом доделаю), потом попробовать обкатать где-нибудь на дваче.

Ага, Postgres, вижу.
Ну, реляционные базы — тоже хорошо.
Как плюс — они гибкие, и можно всегда добавлять какие-то фичи, которые были бы сложны в условиях просто файлов.
Да и в случае роста всегда можно поднять read-only реплики.
lynxchan пишут на MongoDB, но в своё время многие обожлись с этим MongoDB, так что я не особо им доверяю теперь.
Хаскель — понимаю, почему он был выбран: интересно было попробовать "что-нибудь такое".
Хрен где найдёте второго программиста на Хаскеле, конечно )
Но основную свою задачу — весело провести время — он наверняка выполнил.

Ладно тогда, я мб появлюсь где-нибудь летом, мб вы уже запилите какой-нибудь минимальный README со списком простейших read-only методов API (получить список досок, получить список тредов доски, получить сообщения треда — три штуки пока хватит) и примеров возвращаемых JSON объектов, а я на основе этой минимальной доки мб сваяю какой-нибудь простейший read-only адаптер для GUI.

Почему бы не вынести API на отдельную страницу Wiki или хотя бы добавить раздел в конец README.

Если будете писать README по API, можете взять для примера вот такой документ, который я писал для "двача":
https://github.com/catamphetamine/captchan/blob/master/docs/2ch.hk.md

@catamphetamine Добавил документацию для RO методов, описания там нет, но есть примеры - по ним в целом должно быть понятно.
https://documenter.getpostman.com/view/5005722/SzRxVpvC?version=latest