Strapi.service OR strapi.db

Ok i managed to do it
const post = await strapi.entityService.findOne(“api::post.post”, id, {populate: [“author”]});

But what is the difference between these 3 approaches?
or atleast between this and first one