You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It's a service definition language (SDL) that is protocol agnostic. The concept "Shape" and "Trait" in Smithy are very similar to those in Punchcard. It should be relatively simple to build an abstraction of Smithy in Punchcard using Shapes and maybe that would be a nicer way to define APIs for API Gateway than the current wonky implementation?
Canonical Smithy Example (imagine this as TypeScript code):
namespace example.weather
/// Provides weather forecasts.
@paginated(inputToken: "nextToken", outputToken: "nextToken",
pageSize: "pageSize")
service Weather {
version: "2006-03-01",
resources: [City],
operations: [GetCurrentTime]
}
resource City {
identifiers: { cityId: CityId },
read: GetCity,
list: ListCities,
resources: [Forecast],
}
resource Forecast {
identifiers: { cityId: CityId },
read: GetForecast,
}
// "pattern" is a trait.
@pattern("^[A-Za-z0-9 ]+$")
string CityId
@readonly
operation GetCity {
input: GetCityInput,
output: GetCityOutput,
errors: [NoSuchResource]
}
structure GetCityInput {
// "cityId" provides the identifier for the resource and
// has to be marked as required.
@required
cityId: CityId
}
structure GetCityOutput {
// "required" is used on output to indicate if the service
// will always provide a value for the member.
@required
name: String,
@required
coordinates: CityCoordinates,
}
// This structure is nested within GetCityOutput.
structure CityCoordinates {
@required
latitude: Float,
@required
longitude: Float,
}
// "error" is a trait that is used to specialize
// a structure as an error.
@error("client")
structure NoSuchResource {
@required
resourceType: String
}
// The paginated trait indicates that the operation may
// return truncated results.
@readonly
@paginated(items: "items")
operation ListCities {
input: ListCitiesInput,
output: ListCitiesOutput
}
structure ListCitiesInput {
nextToken: String,
pageSize: Integer
}
structure ListCitiesOutput {
nextToken: String,
@required
items: CitySummaries,
}
// CitySummaries is a list of CitySummary structures.
list CitySummaries {
member: CitySummary
}
// CitySummary contains a reference to a City.
@references([{resource: City}])
structure CitySummary {
@required
cityId: CityId,
@required
name: String,
}
@readonly
operation GetCurrentTime {
output: GetCurrentTimeOutput
}
structure GetCurrentTimeOutput {
@required
time: Timestamp
}
@readonly
operation GetForecast {
input: GetForecastInput,
output: GetForecastOutput
}
// "cityId" provides the only identifier for the resource since
// a Forecast doesn't have its own.
structure GetForecastInput {
@required
cityId: CityId,
}
structure GetForecastOutput {
chanceOfRain: Float
}
The text was updated successfully, but these errors were encountered:
One new library I've found interesting and derived a bunch of inspiration from lately is Smithy: https://github.com/awslabs/smithy.
It's a service definition language (SDL) that is protocol agnostic. The concept "Shape" and "Trait" in Smithy are very similar to those in Punchcard. It should be relatively simple to build an abstraction of Smithy in Punchcard using Shapes and maybe that would be a nicer way to define APIs for API Gateway than the current wonky implementation?
Canonical Smithy Example (imagine this as TypeScript code):
The text was updated successfully, but these errors were encountered: