Run one step, then check it
Read the step before copying. Bash commands belong in Git Bash on Windows or Azure Cloud Shell set to Bash; PowerShell uses different syntax. A JSON, YAML, Bicep or application-code example belongs in the named file, not directly at the terminal prompt. Follow any shell-specific instructions below.
Keep the same terminal open so earlier variables remain available. Copy one complete command block without the terminal's $ prompt. A backslash continues a command onto the next line. If Bash shows a lone >, it is waiting for the rest of a quote, command or file block. Finish the complete block; if the paste was incomplete, press Ctrl+C and copy it again. Do not paste the next step into an unfinished command.
A line such as RG="training-group" stores a value without printing it. Output captured with $(...) is also stored; a blank screen alone does not prove failure. A sleep deliberately waits, and -o none suppresses normal output. Wait for your normal prompt, then run the step's checkpoint. After an error, stop and keep the exact command and message; later steps cannot repair a missing resource. Never share passwords, access tokens or secret values in a screenshot.
Start with one partner request
The warehouse wants the red jacket’s catalogue entry. Download the supplied OpenAPI contract. It has one GET operation and fictional data. You can complete the desk track without an Azure account. The optional mock track requires an API Management instance you are allowed to change; its tier and usage can cost money. Check the current feature and price information before creating one. This exercise does not deploy a real backend or configure production authentication.
Class 38a · Read the contract
Open the file. Find the path, method, 200 response and JSON example.
Write the request: GET /products/RJ-10. Write the expected example fields.
Explain why this request retrieves an item rather than creating an order.
Check
The example has sku RJ-10 and name Red jacket. The contract describes a GET; it does not implement a running service.
Class 38b · Place three people on the diagram
Draw a partner calling the gateway, Ada changing its configuration, and a developer reading its portal.
Label gateway, management plane and developer portal separately.
Record which tier features your real networking and portal requirements would need. Use the current tier documentation, not a memorised price.
Check
The caller’s request is handled by the gateway. The configuration change uses the management plane; learning and subscription onboarding use the portal when enabled. They are different responsibilities.
Class 38c · Import and observe a mock
Optional Azure path: in your training APIM instance, choose APIs → Add API → OpenAPI. Import the supplied file and use catalogue as the API URL suffix.
Select its GET operation. In inbound processing, add the mock-response policy below. Keep the base element.
Use the operation’s Test tab, include the required subscription key if enabled, and send the request. Expect HTTP 200 and the example JSON; record the actual result.
Remove the mock before any real-backend exercise. A mock response proves the gateway path, not backend reachability.
<policies> <inbound><base /><mock-response status-code="200" content-type="application/json" /></inbound> <backend><base /></backend> <outbound><base /></outbound> <on-error><base /></on-error> </policies>
Microsoft’s mock walkthrough explains the operation response and test controls.
Class 38d · Predict the policy order
Supplied desk trace: Before subscription check: missing key After valid key: token audience check fails After valid caller checks: mock returns 200
Predict which requests should reach the success mock.
Explain why a 200 generated by an early mock cannot prove downstream validation.
In any real exercise, place required caller checks before the mock and collect a failing request as well as a success.
Check
Only the request passing the configured checks reaches the success response. An early mock short-circuits later processing. The supplied trace is illustrative; your configured error status must be observed.
Class 38e · Separate two subscriptions
Warehouse: subscription W, active Courier: subscription C, suspended Both use the same catalogue API
Optional Azure path: add the training API to a training product that requires a subscription, then create two separately named training subscriptions.
Send the request with each subscription’s key. Keep keys out of saved screenshots and shared logs.
Suspend Courier and repeat both requests. Expect Courier refused and Warehouse still permitted; record the actual status.
Check
Separate subscriptions let you suspend the affected caller without suspending both. A subscription key is not an order-level authorisation decision.
Class 38f · Judge claims without fabricating a token
Policy expects issuer I, audience catalogue-api, scope catalogue.read Claims A: issuer I, audience catalogue-api, scope catalogue.read Claims B: issuer I, audience payments-api, scope catalogue.read Claims C: issuer I, audience catalogue-api, scope orders.write
Choose which claim set matches the supplied conditions.
Explain why these text claims cannot be pasted into a request as a valid signed token.
For a real auth lab, use an actual configured issuer, signed token and policy; check signature, validity and claims. Do not report this desk task as configured OAuth.
Check
A matches the supplied claims. B has the wrong audience; C lacks the required scope. All still need real signature and validity verification in a running authentication flow.
Class 38g · Trace the two network legs
Partner → public gateway: reachable Gateway → private backend: no route Partner → backend public URL: reachable
Mark the failed leg and the gateway-bypass path.
Write the DNS, route and authentication checks for each leg.
Before changing public access, choose a supported APIM networking model and tier, prove the intended private route, and test both an allowed caller and a bypass attempt.
Check
A reachable gateway does not prove it can reach the backend. Leaving an unprotected public backend can bypass gateway controls. This supplied trace does not establish an actual private network configuration.
Class 38h · Keep the caller’s promise
v1: {"sku":"RJ-10","name":"Red jacket"}
Candidate: {"sku":"RJ-10","displayName":"Red jacket"}
Warehouse reads the field nameIdentify the breaking change.
Write a version plan that gives Warehouse time to migrate. Contrast it with a non-breaking revision.
Record gateway status, latency and caller identity needed to check the cutover, without logging keys or tokens.
Check
Removing name breaks Warehouse. Preserve its contract or publish a deliberate new version with a migration plan. A revision is not permission to silently break an existing caller.
Finish and clean up
Delete only the training API, product and subscriptions created for this exercise if the instance is shared. If you created a dedicated instance and group, remove those through your approved teardown and verify deletion. Keep a note separating the desk checks, mock requests you actually ran, and backend/authentication/network checks you have not run.