-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathopenapi.yaml
254 lines (246 loc) · 7.9 KB
/
openapi.yaml
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
openapi: 3.1.0
info:
title: "しずかなインターネット API"
version: 1.0.0
description: |-
- このAPIは自分の記事データを取得するために利用します。他のユーザーのデータを取得することはできません。
- APIは[プロジェクトのスポンサー](https://sizu.me/sponsors/purchase)のみが利用できます。
- 認証やレート制限などについては[GitHubリポジトリ](https://github.com/catnose99/quiet-internet-api-docs)を参照してください。
externalDocs:
description: quiet-internet-api-docs (GitHub)
url: https://github.com/catnose99/quiet-internet-api-docs
security:
- bearerAuth: []
servers:
- url: https://sizu.me
paths:
"/api/v1/posts":
get:
summary: "記事の一覧を取得する"
description: |-
- 自分の記事一覧を取得するためのエンドポイントです。
tags: ["posts"]
parameters:
- in: query
name: page
description: ページ番号
schema:
type: integer
minimum: 1
maximum: 999
default: 1
- in: query
name: perPage
description: 1ページあたりの記事数
schema:
type: integer
minimum: 1
maximum: 100
default: 20
- in: query
name: sort
description: ソートの基準(作成日または更新日)
schema:
type: string
enum: ["created", "updated"]
- in: query
name: direction
description: ソートの方向(昇順または降順)
schema:
type: string
enum: ["asc", "desc"]
- in: query
name: visibility
description: |-
記事の公開範囲
* `MYSELF`: 自分だけ(非公開)
* `ANYONE`: みんな(公開)
* `URL_ONLY`: URLを知っている人だけ(URL限定公開)
schema:
type: string
enum: ["MYSELF", "ANYONE", "URL_ONLY"]
- in: query
name: createdAfter
description: 指定日時以降に作成された記事を取得。ISO 8601形式で指定する。
schema:
type: string
format: date-time
- in: query
name: createdBefore
description: 指定日時以前に作成された記事を取得。ISO 8601形式で指定する。
schema:
type: string
format: date-time
- in: query
name: updatedAfter
description: 指定日時以降に更新された記事を取得。ISO 8601形式で指定する。
schema:
type: string
format: date-time
- in: query
name: updatedBefore
description: 指定日時以前に更新された記事を取得。ISO 8601形式で指定する。
schema:
type: string
format: date-time
responses:
"200":
description: 記事一覧の取得に成功
content:
application/json:
schema:
type: object
properties:
posts:
type: array
items:
$ref: "#/components/schemas/PostMeta"
pagination:
$ref: "#/components/schemas/Pagination"
example:
value:
{
"posts":
[
{
"slug": "2n0ag76",
"title": "Hello, world!",
"bodyCharacterCount": 123,
"visibility": "ANYONE",
"tags": ["blog", "travel"],
"createdAt": "2023-08-08T12:34:56.789Z",
"updatedAt": "2023-08-08T14:34:56.789Z",
},
{
"slug": "p11dguw",
"title": "Hello, world! 2",
"bodyCharacterCount": 456,
"visibility": "MYSELF",
"tags": [],
"createdAt": "2023-08-08T11:32:56.789Z",
"updatedAt": "2023-08-08T15:38:56.789Z",
},
],
"pagination":
{
"currentPage": 1,
"nextPage": 2,
"prevPage": null,
"perPage": 20,
"sort": "createdAt",
"direction": "desc",
},
}
"400":
description: "Invalid query parameter"
"401":
description: "Authentication failed"
"429":
description: "Rate limit exceeded"
"500":
description: "Internal server error"
"/api/v1/posts/{slug}":
get:
summary: "記事の詳細情報を取得する"
description: "指定されたslugの記事の詳細情報を取得するためのエンドポイントです。"
tags: ["posts"]
parameters:
- in: path
name: slug
description: 記事のslug
required: true
schema:
type: string
maxLength: 100
minLength: 1
responses:
"200":
description: 記事の詳細
content:
application/json:
schema:
type: object
properties:
post:
$ref: "#/components/schemas/PostDetail"
"400":
description: "Invalid slug"
"401":
description: "Authentication failed"
"404":
description: "Article not found"
"429":
description: "Rate limit exceeded"
"500":
description: "Internal server error"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: |-
[ダッシュボード](https://sizu.me/dashboard/settings?tab=sponsor)から取得したAPIキーを指定します。
schemas:
PostMeta:
type: object
properties:
slug:
type: string
title:
type: string
description: 記事のタイトル
bodyCharacterCount:
type: integer
description: 本文の文字数
visibility:
type: string
enum: ["MYSELF", "ANYONE", "URL_ONLY"]
description: |-
記事の公開範囲
* `MYSELF`: 自分だけ(非公開)
* `ANYONE`: みんな(公開)
* `URL_ONLY`: URLを知っている人だけ(URL限定公開)
tags:
type: array
items:
type: string
createdAt:
type: string
format: date-time
description: 記事の作成日
updatedAt:
type: string
format: date-time
description: 記事の更新日
PostDetail:
allOf:
- $ref: "#/components/schemas/PostMeta"
- type: object
properties:
bodyMarkdown:
type: string
nullable: true
description: 本文のMarkdown
bodyHtml:
type: string
nullable: true
description: 本文のHTML
Pagination:
type: object
properties:
currentPage:
type: integer
nextPage:
type: integer
nullable: true
prevPage:
type: integer
nullable: true
perPage:
type: integer
sort:
type: string
enum: ["created", "updated"]
direction:
type: string
enum: ["asc", "desc"]