Wpis z mikrobloga

Gdybyście się zastanawiali dlaczego wykop działa tak słabo.

Zastanówmy się jak można przekazać komunikat do aplikacji, że chcę zaplusować jakiś wpis, wystarczy wysłać komunikat Chcę zaplusować komentarz o id x
Więc mamy komendę + identyfikator, możemy to uzyskać robiąc taki request:

POST /articles/:id/votes
Nie potrzebujemy nic więcej, (oprócz jakiejś autoryzacji czy innych tokenów) w responsie też nie zwracajmy contentu, zwróćmy HTTP 204 No content
Tysiące ludzi lajkuje gównowpisy, zaoszczędzimy troche transferu. Chociaż, jeśli chcemy być bardziej dynamiczni to możemy zwrócić ilość lajków z jakiejś szybkiej bazy np redis gdzie są po prostu incrementowane. Na przykład tak: {"votes": int}
Analogiczne można zrobić z usuwaniem

DELETE /aticles/:id/votes
To samo w zrwotce 204 No content. Lub analogicznie jak wyżej {"votes": int}.

Jak to się robi na wykopie?
Sam endpoint nie jest jakoś straszny

/ajax2/wpis/voteUp/…
Ale ciekawe jest to co dostajemy w odpowiedzi, wydawać by się mogło, że wystarczy informacja czy sukces, czy nie?

for(;;);{"operations":[{"type":"content","html":"+: kiera1<\/a>, invictuss<\/a> +3627 innych<\/a><\/div>","find":"div.votersContainer:first","closest":"li"},{"type":"replace","html":"\n\t\t **+3629<\/span><\/b>\n\t\t \t*<\/i><\/a>\n\t\t *<\/i>\n\t\t\t<\/p>","closest":"p"}]}
Dostajemy JavaScript, który zawiera Jsona, który zawiera listę operacji (dokładnie to dwie), które zawierają HTML.
Są to operacje typu content, oznacza mniej więcej "wstaw zawartość pola html tam gdzie wskazuje pole find", oraz replace, które działa w zasadzie tak samo.

Warto zwrócić uwagę na dolny pasek


+: kiera1, invictuss +3859 innych


właściwie +x innych to licznik pomniejszony o dwie nazwy użytkowników z przodu. Nazwy użytkowników na początku czasami się zmieniają po akcji plusowania, ale czy muszą? Czy warto marnować zasoby na taką pierdołę?
Programiści wykopu stwierdzili, że muszą, dlatego cały portal działa jak gówno.
Nie dlatego, że jest dużo użytkowników, tylko dlatego, że jest słabo zaprojektowany.

#webdev #programowanie #restapi #maciejpsuje #wykop #mikroblog****
  • 18
@michal__q: kiedyś pytałem Macieja o to, powiedział że ta decyzja została podjęta z jakichś tam powodów, nawet brzmiały wtedy sensownie. Tylko chyba nie przemyśleli że to się będzie słabo skalować ( ͡° ͜ʖ ͡°) to było z 5-6 lat temu, od tamtej pory ilość informacji przepływająca przez Wykop pewnie mocno się zwielokrotniła
@michal__q: tak się kiedyś po prostu robiło apki, bo nie było reacta i vue, ani API z którego korzystał cały front i tak bylo prościej. To się tak wydaje, że to nieoptymalne bo to brzydko wygląda, ale założę się ze react żeby wyrenderować nowy widok wykona znacznie więcej operacji.
@michal__q: też tego nie rozumiem.
Co więcej jakiś czas temu widziałem informacje, że wykop jest przepisywany na coś nowszego / lepiej zrobionego.
Można zastanowić się ile czasu im to zajmie.. i według mnie to już dawno powinno być zrobione ( ͡° ͜ʖ ͡°)