From product identifiers to UUID

Compatible versions: v7 / SaaS

#From product identifier to product UUID

This guide only concerns 7.0 and Serenity users.

The goal of this guide is to help you to move from a product-identifier-based logic to a UUID one.

#What will happen?

We deployed 8 new API endpoints, endpoints that have the same role as already-existing ones:

From November 2022, the product identifier value (pim_catalog_identifier attribute) has now become optional.

#Why do we do that?

A PIM used to contain one and only identification: the so-called field identifier (the only pim_catalog_identifier attribute of the whole product). In Serenity, this field value is the SKU (Stock Keeping Unit) of the product, but what if you need to identify your product with several product identifiers (SKU, EAN, GTIN,...)? Adding classic fields won't do the job: you need a kind of identifier field for each product. And how will you identify your product if its SKU has changed?

That's the purpose of the brand-new product UUID feature.

But before making it happen, a product must have a unique and immutable way to identify it: that's why we introduced the product UUID (for Universally Unique Identifier).

#What are the impacts?

Of course, Products endpoints will remain available (and they be enriched with a UUID property), even whith the availability of the new API endpoints. Nevertheless, now that the current product identifier is optional:

#What do we advise you?

As UUID API endpoints have now been released, we recommend you to jump on the bandwagon right away:

#An example of what you may have to do?

Let's imagine you developed a product-identifier-based solution that synchronizes PIM products to a random eCommerce solution.

You persist the correlation between PIM products and eCommerce ones in a correlation table.

    TABLE correlation {
          akeneo_identifier,
          ecommerce_identifier
      }
    

Today, its running is as follows:

  Get all Akeneo products with GET /api/rest/v1/products
      For each retrieved products:
        identifier = identifier of the product
        Get the ecommerce_identifier matching identifier by querying the correlation table
        if ecommerce_identifier was not found
          Add the product to the eCommerce
          Add (identifier, ecommerce_identifier) in the correlation table
        else
          Update the product identified by ecommerce_identifier in the eCommerce
    

How do you turn your application into a product-UUID one?

Firstly, replace the way of getting Akeneo products: from GET /api/rest/v1/products to GET /api/rest/v1/products-uuid. Then, add a UUID column to your correlation table.

    TABLE correlation {
          akeneo_identifier,
          akeneo_uuid,
          ecommerce_identifier
      }
    

And at last, step by step, replace akeneo_identifier in your correlation table with uuid

    Get all Akeneo products with GET /api/rest/v1/products-uuid
        For each retrieved products:
            identifier = identifier of the product
            uuid = uuid of the product
            Get the ecommerce_identifier matching uuid in the correlation table
            if ecommerce_identifier was not found
                Get the ecommerce_identifier matching identifier in the correlation table
                if ecommerce_identifier was found
                    Add uuid in the correlation table
                    Update the product in the eCommerce
                else
                    Add the product to the eCommerce
                    Add (identifier, uuid, ecommerce_identifier) in the correlation table
            else
                Update the product identified by ecommerce_identifier in the eCommerce
    

If you need help, don't hesitate to contact us!