Skip to content

Api Path Parameter

Sample configuration for api-path-parameter in data-plane.

Try it
main.tsp
import "@typespec/http";
import "@typespec/rest";
import "@typespec/versioning";
import "@azure-tools/typespec-azure-core";
using Http;
using Rest;
using Versioning;
using Azure.Core;
using Azure.Core.Traits;
@service(#{ title: "Contoso Widget Manager" })
@versioned(Contoso.WidgetManager.Versions)
@useAuth(ApiKeyAuth<ApiKeyLocation.header, "X-Key">)
namespace Contoso.WidgetManager;
@doc("The Contoso Widget Manager service version.")
enum Versions {
@doc("Version 2022-08-31")
`2022-08-31`,
}
// Models ////////////////////
@doc("A widget.")
@resource("widgets")
model Widget {
@key("widgetName")
@doc("The widget name.")
@visibility(Lifecycle.Read)
name: string;
@doc("The ID of the widget's manufacturer.")
manufacturerId: string;
...EtagProperty;
}
@doc("A manufacturer of widgets.")
@resource("manufacturers")
model Manufacturer {
@key("manufacturerId")
@doc("The manufacturer's unique ID.")
@visibility(Lifecycle.Read)
id: string;
@doc("The manufacturer's name.")
name: string;
@doc("The manufacturer's full address.")
address: string;
...EtagProperty;
}
// Operations ////////////////////
@doc("The ApiVersion path parameter.")
model ApiVersionPathParameter {
@segment("api")
@path("api-version")
@doc("The API version to use for this operation.")
apiVersion: string;
}
alias ServiceTraits = TraitOverride<VersionParameterTrait<ApiVersionPathParameter>> &
SupportsRepeatableRequests &
SupportsConditionalRequests &
SupportsClientRequestId;
alias Operations = Azure.Core.ResourceOperations<ServiceTraits>;
interface Widgets {
// Operation Status
@doc("Gets status of a Widget operation.")
@sharedRoute
getWidgetOperationStatus is Operations.GetResourceOperationStatus<Widget>;
@sharedRoute
getWidgetDeleteOperationStatus is Operations.GetResourceOperationStatus<Widget, never>;
// Widget Operations
@doc("Creates or updates a Widget asynchronously")
@pollingOperation(Widgets.getWidgetOperationStatus)
createOrUpdateWidget is Operations.LongRunningResourceCreateOrUpdate<Widget>;
@doc("Get a Widget")
getWidget is Operations.ResourceRead<Widget>;
@doc("Delete a Widget asynchronously.")
@pollingOperation(Widgets.getWidgetDeleteOperationStatus)
deleteWidget is Operations.LongRunningResourceDelete<Widget>;
@doc("List Widget resources")
listWidgets is Operations.ResourceList<
Widget,
ListQueryParametersTrait<StandardListQueryParameters & SelectQueryParameter>
>;
}
interface Manufacturers {
@doc("Gets status of a Manufacturer operation.")
getManufacturerDeleteOperationStatus is Operations.GetResourceOperationStatus<
Manufacturer,
never
>;
@doc("Creates or replaces a Manufacturer")
createOrReplaceManufacturer is Operations.ResourceCreateOrReplace<Manufacturer>;
@doc("Get a Manufacturer")
getManufacturer is Operations.ResourceRead<Manufacturer>;
@doc("Delete a Manufacturer asynchronously.")
@pollingOperation(Manufacturers.getManufacturerDeleteOperationStatus)
deleteManufacturer is Operations.LongRunningResourceDelete<Manufacturer>;
@doc("List Manufacturer resources")
listManufacturers is Operations.ResourceList<Manufacturer>;
}
// A "global" RPC operation
#suppress "@azure-tools/typespec-azure-core/no-rpc-path-params" "The API version is part of the route path."
@route("/api/{api-version}/service-status")
@doc("Responds with status information about the overall service.")
op getServiceStatus is RpcOperation<
{},
{
statusString: string;
},
ServiceTraits
>;