While the question here is very open-ended and best practices would depends many factors, eg. what type of app is being utilized or if this store is using a standard or custom storefront - below are a few resources that cover the basics, and various product APIs we offer.
The Admin API is available in REST and GraphQL, and is intended for building apps and integrations that "extend and enhance" on the Shopify admin. Using the product, productVariant, or related resources the API can create, query, edit, and delete data related to products. The docs provide insights on object data and fields, as well as examples of queries and payloads.
Here is an example snippet from our doc description:
The Product resource lets you manage products in a merchant’s store. You can use ProductVariants to create or update different versions of the same product. You can also add or update product Media. Products can be organized by grouping them into a Collection.
The Storefront API is available in GraphQL and provides a separate endpoint, with different intended functionality. These APIs focus on querying data, that can then be used to build a custom selling experience, eg. on a mobile app or through a different platform. If you are just getting started with custom storefronts, we provide an excellent blog post - Shopify Storefront API Learning Kit.
Beyond the links shared, our development docs offer an extensive overview of all available resources, as well as info on app types, app setup, configuration, and much more. Before building we suggest using tools like Postman, Insomnia, or either Shopify GraphiQL Explorer to confirm expected data and/or test any APIs. If you are new to our APIs or even to GraphQL, consider reviewing the GraphQL Learning Kit and our Getting Started with GraphQL guide.