-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshowcase.smithy
More file actions
129 lines (103 loc) · 1.98 KB
/
showcase.smithy
File metadata and controls
129 lines (103 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
$version: "2"
namespace example.showcase
/// A showcase service demonstrating working Smithy 2.0 features
@protocols([{name: "smithy.protocols#restJson1"}])
service ShowcaseService {
version: "2024-01-01"
operations: [GetItem, CreateItem]
errors: [ValidationError, NotFoundError]
}
/// Get an item by ID
@readonly
@http(method: "GET", uri: "/items/{itemId}")
operation GetItem {
input: GetItemRequest
output: GetItemResponse
errors: [NotFoundError]
}
/// Create a new item
@idempotent
@http(method: "PUT", uri: "/items/{itemId}")
operation CreateItem {
input: CreateItemRequest
output: CreateItemResponse
errors: [ValidationError]
}
structure GetItemRequest {
@httpLabel
@required
itemId: ItemId
}
structure GetItemResponse {
@required
item: Item
}
structure CreateItemRequest {
@httpLabel
@required
itemId: ItemId
@httpPayload
@required
item: Item
}
structure CreateItemResponse {
@required
itemId: ItemId
@required
createdAt: Timestamp
}
structure Item {
@required
name: String
@required
category: Category
@default(0)
price: Integer
@sensitive
internalNotes: String
@deprecated(message: "Use tags instead")
oldField: String
}
// Simple type with constraint
@pattern("^item-[0-9]+$")
string ItemId
// Enum with proper single-line syntax
enum Category {
ELECTRONICS
CLOTHING
BOOKS
HOME
}
// IntEnum with values
intEnum Priority {
LOW = 1
MEDIUM = 2
HIGH = 3
}
// Error structures
@error("client")
structure NotFoundError {
@required
message: String
@required
itemId: ItemId
}
@error("client")
structure ValidationError {
@required
message: String
fieldErrors: FieldErrorList
}
list FieldErrorList {
member: FieldError
}
structure FieldError {
@required
field: String
@required
message: String
}
map ItemMetadata {
key: String
value: String
}