Where can you find the presentation slides after the training?
Question 1Answer
a.
https://github.com/commercetools
b.
https://learn.commercetools.com/
c.
https://docs.commercetools.com/
d.
https://support.commercetools.com/
e.
https://demo.commercetools.com/
Presentation slides used in the training sessions are made available at the learning portal after the training is finished and marked as complete..
What would you refer to if you need to confirm whether creating a shipping method requires you to provide a tax category or not?
Question 2Answer
https://marketplace.commercetools.com/
API documentation explains each endpoint with its representations, intended usage and fields, required and optional.
Which of the following interfaces can be used to create a new discount?
Question 3Answer
https://mc.{region}.{cloudProvider}.commercetools.com/
https://impex.{region}.{cloudProvider}.commercetools.com/
You can create a discount in the Merchant Center using the rule builder.
You can also create a discount by sending a payload to Discounts endpoint in Impex.
Where can you find the tutorials, for instance the one on how to delete all the products?
Question 4Answer
commercetools tutorials focus on typical e-commerce use cases you would like to realize with the commercetools platform and can be accessed here.
What information does HTTP API Contract document provide you?
How commercetools checks API requests being correctly authorized?
What HTTP API requests headers you need to set for an API request?
What limits are imposed on objects and parameters by default?
How commercetools handles platform API versioning?
HTTP API Contract presents the different contracts of the API, versioning and default imposed limits per project.
According to the API contract, what is true about a slug?
Must be at least two characters long
Can be empty
Can contain the letter ‘ä’
A Slug must match the pattern [a-zA-Z0-9_\-]{2,256}, hence they are limited to 256 characters.
Slugs sind eindeutige, lesbare Identifikatoren in URLs, die normalerweise auf bestimmte Anforderungen beschränkt sind. Sie dürfen nicht leer sein (Antwort b) und können keine Sonderzeichen wie ‘ä’ enthalten (Antwort c), um die Kompatibilität und Lesbarkeit in URLs zu gewährleisten.
You created a project a while ago. How can you confirm the number of days left in the trial period of your project?
Merchant Center -> Manage projects
Impex -> Project endpoint -> read data
Merchant Center -> Settings -> Project Settings
Impex -> Settings endpoint -> project -> read data
You can list all your projects from Merchant Center -> Manage projects.
You can also get project specific details from the Project endpoint in Impex.
What is true about locales?
You can have a description in both locales, en-US and en, even if both descriptions are exactly the same.
You must provide a description in locale en-US only, if the the description for the locale en is the same.
You can only have a description in locale en-US, if you have added US as a country.
Es ist möglich, eine Beschreibung sowohl in en-US als auch in en zu haben, selbst wenn beide Beschreibungen identisch sind. Die Platform erlaubt es, unterschiedliche oder gleiche Beschreibungen für verschiedene Locales zu speichern.
en-US
en
Every organization has a default team called Administrators. Using team permissions, what can you restrict?
What they see (which menu items)
What resources they can update
Which project(s) they have access to
Nothing
Das Standardteam Administrators hat umfassende Berechtigungen und uneingeschränkten Zugriff auf die Ressourcen innerhalb eines Projekts. Deshalb können über Team-Berechtigungen keine Einschränkungen für Administratoren gesetzt werden.
In some countries, total tax is a combination of multiple taxes. For example, in Canada, the total tax may include both federal Goods and Services Tax (GST) and Provincial Sales Tax (PST) or Harmonized Sales Tax (HST), which can be represented as subRates. How do you create a new tax category for these countries?
You can create a tax category with tax sub rates in the Merchant Center.
You can create a tax category with tax sub rates via an API request.
You can create a tax category with multiple tax categories nested in it in the Merchant Center.
You can create a tax category with multiple tax categories nested in it via an API request.
A tax category with subRates can be created through the API request or in the Merchant Center.
In commercetools können Steuerkategorien erstellt werden, die Subrates enthalten, um mehrere Steuerkomponenten wie GST und PST/HST für bestimmte Länder zu repräsentieren. Dies ist sowohl über das Merchant Center (Option a) als auch über API-Anfragen (Option b) möglich.
What does commercetools platform API documentation cover?
Contains data representations for each resource together with the HTTP methods for accessing them
Provides information about the intended use of API requests
Lists fields with their types and if a field is required or optional
How would you add two different customers to the same customer group?
create a list of UpdateActions and POST a single Update
create a list of UpdateActions and POST two separate Updates
create two lists of UpdateActions and POST two separate Updates
As you are adding both the customers to the same customer group, you can reuse the same update action list.
Um zwei Kunden zu derselben Kundengruppe hinzuzufügen, kannst du eine Liste von UpdateActions erstellen und sie in zwei separaten Anfragen (Updates) senden. Dies ist der bevorzugte Ansatz, wenn du sicherstellen möchtest, dass jede Aktion individuell verarbeitet wird.
What do you need to provide to obtain a token through the client credentials authorization flow? Please choose only the minimum required fields.
email and password of an authenticated user
clientId, clientSecret, and scope
clientId and clientSecret
a refresh token
Issue a request to the auth service, providing your client_id and client_secret via HTTP Basic Authentication where the username is the client_id and the password is the client_secret. Scope is optional.
How do you create a new shipping method using platform API?
POST a shipping method resource
GET a shipping method resource draft
POST a shipping method resource draft
POST an update to /shipping-methods endpoint
Um eine neue Versandmethode über die Platform API zu erstellen, sendest du einen POST-Request an den Endpoint für Versandmethoden (/shipping-methods) und übergibst dabei einen ShippingMethodDraft. Dieser Draft enthält die Details für die neue Versandmethode. Ein ShippingMethodDraft ist eine Vorlage, die die erforderlichen Informationen für die Versandmethode definiert.
/shipping-methods
Die anderen Optionen sind falsch, da:
a. Ein Versandmethoden-Resource wird nicht direkt gepostet, sondern über einen Draft erstellt.
b. Ein "GET" Request wird nicht verwendet, um einen neuen ShippingMethod Draft zu erstellen.
d. Ein Update an einem bestehenden ShippingMethod Resource ist nicht erforderlich, wenn du eine neue Methode erstellst.
Which of the following gives a correct tax category resource draft?
const createTaxCategoryDraft = async () => { return { name:"FancyTax",
description: "Tax for fancy products",
rates: [] }; };
rates: [{ name:"FancyTaxDE",
includedInPrice: true,
country: "DE",
amount:0.19 }] }; };
rates: [{ name:"FancyTaxCA",
includedInPrice: false,
country: "CA",
subRates: [{ name:"RST", amount:0.08 }, { name:"GST", amount:0.05 }] }] }; };
rates: [{ name:"FancyTaxUS",
country: "US",
amount:0.13 }] }; };
includedInPrice in rates is missing but obligatory
includedInPrice
Which of the following would update the customer number without any error?
apiRoot .withProjectKey({projectKey})
.customers()
.withKey({key: customer.body.key})
.post({
body: {
actions: [{
action: "setCustomerNumber",
customerNumber: "1" }] } })
.execute()
body:
{ version: customer.body.version,
.post({ body: {
version: customer.body.version,
actions:
{action:
"setCustomerNumber", customerNumber: "1" } } })
action: "setCustomerNumber"
, customerNumber: "1" }] } })
Die API-Dokumentation für das Kunden-Update (mit der POST-Methode) zeigt, dass eine version der Ressource erforderlich ist, wenn du ein Update für einen bestehenden Kunden durchführen möchtest. Die version stellt sicher, dass du die richtige Version des Kunden aktualisierst und schützt vor Konkurrenzmodifikationen (z. B. wenn gleichzeitig ein anderer Benutzer dieselbe Ressource aktualisieren möchte).
POST
version
Die richtige Struktur für das Update-Objekt sieht folgendermaßen aus:
Die version ist erforderlich, um sicherzustellen, dass du die aktuellste Version des Kunden aktualisierst und keine Konkurrenzmodifikation auftritt.
Du führst eine setCustomerNumber-Aktion aus, um die customerNumber auf "1" zu setzen.
setCustomerNumber
customerNumber
"1"
Option a: Diese Option hat keine version im Body. Die version ist jedoch erforderlich, um das Update korrekt auszuführen. Ohne die version-Angabe könnte ein Fehler auftreten, insbesondere wenn die Ressource bereits geändert wurde.
Option c: Diese Option ist ähnlich wie a, aber der Fehler hier ist, dass die actions nicht als Array übergeben wird. actions müssen ein Array sein, auch wenn nur eine einzige Aktion durchgeführt wird. In der Dokumentation wird das als Array beschrieben.
actions
Option d: Diese Option ist ebenfalls falsch, weil die version fehlt und die withKey-Methode im Pfad nicht verwendet wird. Das bedeutet, dass die ID des Kunden im Pfad fehlt, was nicht den API-Anforderungen entspricht. Die withKey-Methode wäre nur erforderlich, wenn du den Schlüssel (key) des Kunden als Identifikator verwenden würdest, aber in diesem Fall ist die Kunden-ID erforderlich.
withKey
Antwort b ist korrekt, weil sie die version-Angabe enthält und die actions im richtigen Format als Array übergibt, um die customerNumber des Kunden zu aktualisieren.
Which of the following would work without any error?
Assume that setCustomerNumber(customer, customerNumber) function creates the update request without any error.
Question 6Answer
getCustomerByKey(customerKey) .then(customer => setCustomerNumber(customer,"")) .catch(console.log)
getCustomerByKey(customerKey) .then(customer => setCustomerNumber(customer,"1")) .catch(console.log)
getCustomerByKey(customerKey) .then(customer => setCustomerNumber(customer,"1")) .then(customer => setCustomerNumber(customer,"2")) .catch(console.log)
Um das zu verstehen, müssen wir uns die Anforderungen und das Verhalten der Funktion setCustomerNumber anschauen.
setCustomerNumber(customer, customerNumber) nimmt zwei Parameter:
setCustomerNumber(customer, customerNumber)
customer: Das Kundenobjekt, das du aktualisieren möchtest.
customer
customerNumber: Die Kundennummer, die du setzen möchtest.
setCustomerNumber(customer, "") (Option a) und setCustomerNumber(customer, "1") (Option c) führen zu Problemen:
setCustomerNumber(customer, "")
setCustomerNumber(customer, "1")
Eine leere customerNumber (wie in Option a) könnte ungültig sein, weil die customerNumber eine gültige Zahl oder ID sein muss, die zugewiesen werden kann. Eine leere Zeichenkette "" könnte eine ungültige Eingabe darstellen, die zu einem Fehler führt.
""
Option b ist korrekt, weil die Kundennummer "1" eine gültige Eingabe ist, die das setCustomerNumber-Verfahren nicht blockieren sollte. In dieser Option wird die customerNumber erfolgreich gesetzt.
Warum Option c nicht funktioniert:
Option c führt zwei setCustomerNumber-Aufrufe hintereinander aus, was in diesem Fall keine Fehler verursacht, aber in realen Szenarien zu Problemen führen kann:
setCustomerNumber kann nur eine einzelne gültige Kundennummer setzen, und sobald der Kunde eine Kundennummer hat, kann sie nicht mehr geändert werden (nach API-Dokumentation).
Diese Option könnte einen Fehler werfen, wenn der Kunde bereits eine Kundennummer hat, und du versuchst, sie mit "2" zu ändern, was nicht möglich ist.
"2"
Option b funktioniert ohne Fehler, weil "1" eine gültige customerNumber ist und keine weiteren Probleme auftreten.
Option a und Option c könnten Fehler verursachen, entweder durch ungültige Eingaben oder durch den Versuch, die customerNumber nach der ersten Änderung erneut zu ändern.
Which of the following is a feature in the Merchant Center?
Quick Access
Personalized Views
Filters on products, orders, discounts
Which of the following does a customer buy?
Product types
Products
Product variants
Product master variants
Product is an abstract while Product Variants generally represent a distinct SKU or sellable good.
In commercetools kauft ein Kunde Produktvarianten (Product variants), nicht nur das Produkt selbst oder den Produkttyp. Ein Produkt kann mehrere Varianten haben, z. B. verschiedene Farben oder Größen. Diese Varianten sind die spezifischen Artikel, die der Kunde letztendlich kauft.
Produktvarianten (Product variants) repräsentieren spezifische Eigenschaften eines Produkts, die der Kunde auswählt, wie z.B. Größe, Farbe oder Material.
Produkttypen (Product types) sind vielmehr eine Kategorisierung und Struktur für Produkte, aber keine gekauften Einheiten.
Produkte (Products) repräsentieren allgemeine Produkte ohne die Spezifizierung der Varianten, und Produktmastervarianten sind die Standardvorlagen der Varianten eines Produkts.
Zusammengefasst: Ein Kunde kauft Produktvarianten (Product variants), die zu einem bestimmten Produkt gehören und die spezifischen Merkmale eines Produkts definieren.
A product type defines an attribute of type localized Enum with three values and “required” and “searchable” options. Assuming that you have two locales in your project, how many product variants can you have for a product of this product type?
a maximum of three
a minimum of three
exactly three
no limit
Ein Produkt-Typ mit einem lokalisierten Enum-Attribut definiert eine Auswahl von möglichen Werten, die in verschiedenen Sprachen angezeigt werden können. Diese Definition des Produkt-Typs legt keine Begrenzung für die Anzahl der Produktvarianten fest, sondern nur die Optionen, die das Enum-Attribut annehmen kann.
Obwohl das Enum-Attribut drei Werte hat, bedeutet das nicht, dass ein Produkt nur eine bestimmte Anzahl von Varianten haben kann. Man könnte unendlich viele Varianten eines Produkts erstellen, indem man weitere Attribute hinzufügt oder andere Werte (z. B. SKU, Farbe, Größe) für jede Variante ändert.
Zusammengefasst: Der Produkt-Typ gibt die möglichen Enum-Werte vor, limitiert jedoch nicht die Anzahl der möglichen Produktvarianten.
You sell flowers and want to recommend pots from the catalog which would fit the flower well. What would be an appropriate type for an attribute “recommended_pots” within the flower product type?
Set of References
Enum of References
Set of Strings
Enum of Strings
Nested
Reference allows you to reference other products, product types etc. Creating a set of references to products, in this case, will allow you to create the attribute recommended_pots.
Ein Attribut „recommended_pots“ innerhalb des Produkttyps für Blumen sollte auf spezifische Artikel (in diesem Fall Töpfe) im Katalog verweisen. Ein Set of References erlaubt es, mehrere Referenzen auf andere Produktressourcen (wie Töpfe) zu speichern. Dies ist passend, da es Ihnen ermöglicht, mehrere Töpfe zu empfehlen, die zu der Blume passen könnten.
Alternative Optionen:
Enum of References oder Enum of Strings wären nicht geeignet, da sie nur eine festgelegte Liste von Werten (Enums) zulassen, die nicht flexibel genug ist, um verschiedene, dynamisch erstellte Topfartikel zu referenzieren.
Set of Strings speichert keine Verweise auf andere Produkte, sondern nur Textwerte.
Nested wäre überkomplex für diesen Zweck und eher für strukturierte, verschachtelte Daten sinnvoll.
What is true about a product attribute with the constraint “same for all”?
It is stored at product level.
It is stored only on the master variant.
It is stored on all variants with the same value.
It is stored as a custom attribute.
sameforAll constraint ensures that an attribute value is same in all variants.
Ein Produktattribut mit der Einschränkung „same for all“ bedeutet, dass dieses Attribut den gleichen Wert für alle Varianten eines Produkts hat. Das Attribut wird in allen Varianten gespeichert, aber mit dem gleichen Wert für jede Variante, um Konsistenz zu gewährleisten.
a. It is stored at product level: Attribute werden nicht direkt auf Produktebene gespeichert, sondern sind Teil der Produktvarianten.
b. It is stored only on the master variant: „Same for all“ bezieht sich auf alle Varianten und nicht nur auf die Mastervariante.
d. It is stored as a custom attribute: „Same for all“ ist eine Einschränkung und keine Eigenschaft eines benutzerdefinierten Attributs.
What is true about the Import API?
You can only update whole product.
You can separately update product and product prices.
ImportRequests are created for creating new resources or updating existing ones.
Posting an ImportRequest imports the resources immediately.
b. You can separately update product and product prices: Die Import API von commercetools ermöglicht es, Produkte und deren Preise unabhängig voneinander zu aktualisieren. Dies erlaubt es, spezifische Änderungen vorzunehmen, ohne immer das gesamte Produkt zu bearbeiten.
c. ImportRequests are created for creating new resources or updating existing ones: Die Import API verwendet ImportRequests, um entweder neue Ressourcen zu erstellen oder bestehende zu aktualisieren. Das bedeutet, dass die API sowohl für die Anlage als auch für die Aktualisierung von Daten verwendet wird.
a. You can only update whole product: Dies ist nicht korrekt, da die API es erlaubt, spezifische Produktdetails wie Preise separat zu aktualisieren.
d. Posting an ImportRequest imports the resources immediately: Import-Anfragen werden nicht sofort verarbeitet. Stattdessen werden die Anfragen in einer Warteschlange platziert und dann asynchron importiert.
Following is a price import request. Assuming the product and product variant are properly referenced, what issues do you see in this code snippet?
const createImportPricesDraft = async () => {
return {
type:"price",
resources:[{
key: "non-existent-key",
value: { centAmount: 1200 },
productVariant: productVariantKeyReference,
product: productKeyReference,
},] }; };
The key doesn't exist.
There is no country code provided.
There is no currency code provided.
All of the above
What is TRUE about commercetools-project-sync docker image?
Question 14Answer
It can be used sync resources between two commercetools projects.
It can't be used to sync tax categories.
It runs a delta sync by default.
Its source code is available on Github.
What would be the quantity of the lineItem with sku SKU123 after the following cart operations?
const AnonymousCartDraftData = {
currency: "EUR", countryCode: "DE", };
const cartDraftData = { currency: "EUR", customerId: "f14d38c7-2087-4f54-a1ef-c2626b309222", countryCode: "DE", }; checkout.createCart(cartDraftData).then((customerCart) =>
checkout.addLineItemsToCart( "SKU123", 5, customerCart ))
.then(checkout.createCart(AnonymousCartDraftData).then((anonymousCart) =>
checkout.addLineItemsToCart( "SKU123", 4, anonymousCart )).then((anonymousCart) =>
checkout.customerSignIn({
email: "email@test.com", password: "password", anonymousCartId: anonymousCart.body.id, anonymousCartSignInMode: "UseAsNewActiveCustomerCart", }).then((loginResult) =>
{ loginResult.body.cart.lineItems.forEach(lineItem =>
{ console.log(lineItem.variant.sku + " : " + lineItem.quantity); }); }) ) ).catch(console.log)
a. 5
b. 4
c. 9
d. 1
What's TRUE about State Machines?
State Machines allow you to model states and transitions depending on your business workflows.
A state with no set of transitions defined (transitions = null), allows a transition to any other state.
A state can only be deleted if it has no incoming transitions.
A state can be transitioned to any other state with an API call.
What is TRUE about Channels?
Channels can have only one specific role.
Channels can have an address.
Channels can have a GeoLocation.
Channels can be used to model specific source and distribution of entities.
Channels can be used to track stock levels from different sources.
You want to create a cart discount that gives free shipping if the customer has products worth at least 100 Euro/Dollar in the cart. Select all that apply.
You set the target to shipping.
You set the discount value to 1.
You set the discount value to 100%.
You could also achieve this by modifying the shipping method directly
What is true about the inventory mode?
The inventory mode can only be set when creating a cart
The inventory mode can only be set once and not changed later.
The inventory mode can be defined per line item.
The default inventory mode can be defined in the project settings.
The default inventory mode is none.
Which of the following is a sound advice regarding the Payments API?
Save credit card number under the field creditCardNumber for next purchases.
It's better not to use the payments API.
Store all payment related activities in the Payment API.
Immediately reset the interfaceId of the payment, if it was wrong or has changed
What are the advantages of using the Stores API?
A subset of resources can be retrieved in the context of a store.
Storefronts can easily retrieve resources with localized values for the selected store.
You can model physical store locations.
/in-store endpoint can only be used with store-based OAuth permissions.
What are the requirements for using in-Store carts?
In-Store carts require a token created with client credentials authorization flow.
In-Store carts are created using the /in-store/key={storeKey}/carts endpoint.
In-Store carts are created using a /me/carts endpoint.
In-Store carts require a token created with the password flow.
In-store carts can be created with an auth token created using the password credentials flow. The api client might have global permissions or permissions restricted to a store.
What is TRUE about the Password flow?
The Password flow needs four credentials clientId, clientSecret, email, and password.
The Password flow can be used to access My endpoints.
The token obtained from an external auth server can be used to access My endpoints.
The Password flow can be used to create anonymous carts
https://docs.commercetools.com/api/authorization#password-flow
How do you create an In-Store cart?
In-Store carts can be created using CartDrafts.
In-Store carts can be created using MyCartDrafts.
In-Store carts are created by posting a draft to /in-store/key={storeKey}/carts.
In-Store carts can only be created with password authorization flow.
Which of the following endpoints can't be used to retrieve published product data only?
/product-projections/search
/product-projections
/products
Products endpoint returns a product catalog with both projections, current and staged.
What will the following search request return?
client
.withProjectKey(projectKey)
.productProjections()
.search()
.get({
queryArgs: { staged:true, markMatchingVariants:true, } })
.execute();
ProductProjectionPagedSearchResponse
ProductProjectionPagedQueryResponse
ProductProjectionResponse
ProductProjectionSearchResponse
What is TRUE about commercetools reference expansion?
Reference expansion can be used to reduce client-server roundtrips.
API request https://api.commercetools.com/training-happy-garden-dev/products?expand=cart will fail because product resources have no reference to carts.
API request https://api.commercetools.com/training-happy-garden-dev/products?expand=masterData.current.categories[*] will expand all categories within a product.
Reference expansion can only be used when querying resources and not in creating, updating or deleting.
API request https://api.commercetools.com/training-happy-garden-dev/products?expand=masterData.current.categories[*] will expand all categories within a product
General Concepts under HTTP API documentation explains reference expansion concept.
What is TRUE about commercetools /graphql endpoint?
It delivers only published product data.
It does not allow modification of resources.
It can deliver data from multiple resources.
It allows sorting
What commercetools feature can be used to customize a resource in your project with custom fields?
Extensions
Resource schema
Types
Custom objects
What is TRUE about Custom Types?
Custom types can be used in the Merchant Center.
Custom types can be created in the Merchant Center.
Custom types can be used to model products.
A resource extended with a custom type stores its values within the custom field.
What is TRUE about API Extensions?
API Extensions need to be enabled per project.
Default timeout for API Extensions is 3 seconds.
API Extensions can return a list of updates.
The order of the execution of API Extensions is defined by a rankOrder.
What is TRUE about the performance of API Extensions?
API Extensions affect the performance of the API they are extending.
API Extensions are not triggered by the changes made in the Merchant Center.
Subscriptions are preferred over API Extensions where you can react to an event asynchronously.
If an API Extension fails, the whole API call fails.
What is TRUE about the following list of api extension triggers?
triggers:[{ resourceTypeId:'order', actions:['Create'] },
{ resourceTypeId:'customer', actions:['Create'] },
{ resourceTypeId:'cart', actions:['Create','Update'] } ]
Question 9Answer
An API extension can't be triggered by multiple resources like carts, orders, and customers.
An API extension can't be triggered by multiple actions like Create and Update.
An API extension can be triggered by a list of changes on a list of resources.
What is true about Subscriptions?
You can create a subscription to more than one resource.
Subscriptions impact the performance of the API requests.
Subscriptions should be replaced with API Extensions wherever possible.
Messages are not guaranteed to be delivered in their natural order.
Which of the following is a valid option when creating a subscription?
Customize how commercetools delivers messages to your queue.
Control the order in which messages are delivered.
Receive messages based on create, delete and update operations.
Receive messages based on pre-defined messages.
What is TRUE about the MACH initiative?
H in MACH stands for Headless, meaning separation of frontend from the backend.
It recommends the use of API-first architecture.
It encourages the replacement of monolithic platform suites with microservice-based architecture.
It requires not only technological but also organizational efforts
What is true about the SUNRISE demo storefront project?
It uses My endpoints for its communication with the commercetools platform.
It requires a project with status "production" and fails on "on-trial" projects.
It is an open-source project.
It can only be deployed on Netlify.
You can find the source code for Sunrise project here.
Zuletzt geändertvor einem Monat