this post was submitted on 23 Oct 2024
48 points (100.0% liked)
Lemmy
12557 readers
3 users here now
Everything about Lemmy; bugs, gripes, praises, and advocacy.
For discussion about the lemmy.ml instance, go to !meta@lemmy.ml.
founded 4 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Most frontends already display available crossposts so you're not wasting anything more than grabbing all the comment sections as well.
I don't agree at all. There's space for complex frontends which attempt to adjust the feed according to their own logic, as well as minimalistic frontends which follow the backend's design explicitly.
We're talking about different things. I'm talking about the view you get when you first open an app - the 'home' screen that lists the posts. The API response for api/v3/post/list doesn't indicate whether something has been crossposted. You can see for yourself by getting a list of the 2 oldest posts on lemmy.ml:
curl --request GET --url 'https://lemmy.ml/api/v3/post/list?type_=Local&sort=Old&page=1&limit=2' --header 'accept: application/json' | jq .
For those 2 posts, you can only find out if they have crossposts by individually querying each post using the api/v3/post endpoint - the first one in that list would be:
curl --request GET --url 'https://lemmy.ml/api/v3/post?id=2' --header 'accept: application/json' | jq .
where crossposts would be in the 'cross_posts' array.
So for an app to display whether a posts listed on the main feed have crossposts, they'd have to query post/list, and then for each entry, query /post as well. This isn't the way these things typically work - there's normally a 1-to-1 relationship between an API query, and displaying the results of that query on the page. Looping through the list you've been given, and making extra queries adds complexity and delay, when the expectation from the user is that this list should appear pretty quickly.
What you're talking about, is the view once a user has clicked on a post, not the post list. This provides the crossposts info. It's important to realise though, that the cross_posts array provides everything an app could want to display info about the other posts. It's not like they are pulling the data for one post, and then pulling data for each listed crosspost, so if they were to start getting the comments for each crosspost, that would be an extra effort (and a potential waste).
My counter to that, would be that if you aren't using the API in the way the developers expected, your app has ceased to be frontend, and is instead its own program that's scraping data from it. There are already some heavy desktop-orientated frontends, and none of them do what you're proposing. I think that the reason why, is because the proper way to do it is for the Lemmy's backend to be changed to provide the information they need in one go. That's unlikely to happen, but that doesn't mean that hacking away at an improper solution is necessarily the right answer (you just end up supporting a project that isn't supporting you in return).
While you're correct about this, this could be handled dynamically. Simply fetch the list of posts quickly as usual, and then start polling for crossposts in the background and if any two appear in the current frontpage the user is seeing, merge them.
Not at all. That's not what scraping means.
I just completely disagree with the idea that a frontend should stick to what the backend design is, especially for a FOSS project.
We appear to be at an impasse.
I've recently been adding an API to PieFed and forked the Lemmy Thunder app as way to test things. My position on this comes from tinkering with Thunder - I can't claim to understand it all, but it seems to me that the API and the app are fundamentally interlinked in ways that make being too adventurous with it difficult. For that app, it would break the existing paradigm to do the kinds of things you're talking about. Thunder uses its own version of an API client (written in Dart), but I've assumed that other apps are written in a similar way, and are essentially wrappers around Lemmy's JavaScript client.
Hopefully, someone else with more app development experience will contribute to this discussion, and set one of us right (I don't mind if it's me that's wrong).