I use URL versioning for clarity: /v1/ and /v2/ with separate controllers. Within a version, I evolve by adding optional fields and using serialization groups. Deprecated endpoints return a Sunset header with a removal date.
Versioning strategies: URL prefix (/v1/, /v2/), custom header (X-API-Version), or Accept header media type (application/vnd.app.v2+json). URL prefix is simplest and most cacheable. Content negotiation uses the Accept header to determine response format (JSON, XML). In Symfony, use MapRequestPayload with different DTOs per version, or use serialization groups to control which fields appear per version. Strong candidates discuss: maintaining backwards compatibility by only adding fields (never removing), using deprecation headers to warn clients, the Symfony Serializer groups for version-specific field sets, running old and new versions in parallel during migration, and API documentation tools like NelmioApiDocBundle that document versions separately.
Tests API design maturity. Candidates who break API contracts without versioning cause client outages. Those who understand versioning strategies and deprecation workflows can evolve APIs safely.