Use GetByIdfrom IPublishedContentCache as Andy’s example here: URL Segment Customisation with Umbraco 15.4
It seems it need to do multiple lookups though - not sure why an GetByIds() isn’t available?
Use Content() from IPublishedContentQuery which support multiple ids.
Use ContentAtRoot() from IPublishedContentQuery which isn’t obsolete, but doesn’t support requesting a specific culture as the old GetAtRoot()
What are best practice to get root node(s) without knowing ids?
Yes, I submitted the PR to make it query culture specific content and simpler to migrate, if the method were used. Basically just a wrapper for the underlying ContentAtRoot() from IPublishedCache used in IPublishedContentQuery.