[GPT Actions] 11. GitHub API 문서화 | 'Issues'와 'Projects', 웹훅(Webhooks)
GitHub API 문서화를 더 확장하고 개선해 보겠습니다. 이번에는 'Issues'와 'Projects' 관련 엔드포인트를 추가하고, 웹훅(Webhooks)에 대한 정보도 포함시켜 보겠습니다.
Step 9: 새로운 태그와 경로 추가
tags:
# ... (이전 태그들 유지)
- name: issues
description: Operations about issues
- name: projects
description: Operations about projects
- name: webhooks
description: Information about repository webhooks
paths:
# ... (이전 경로들 유지)
/repos/{owner}/{repo}/issues:
post:
summary: Create an issue
tags:
- issues
parameters:
- name: owner
in: path
required: true
schema:
type: string
- name: repo
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IssueCreate'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Issue'
/repos/{owner}/{repo}/projects:
get:
summary: List repository projects
tags:
- projects
parameters:
- name: owner
in: path
required: true
schema:
type: string
- name: repo
in: path
required: true
schema:
type: string
- name: state
in: query
schema:
type: string
enum: [open, closed, all]
default: open
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Project'
/repos/{owner}/{repo}/hooks:
get:
summary: List repository webhooks
tags:
- webhooks
parameters:
- name: owner
in: path
required: true
schema:
type: string
- name: repo
in: path
required: true
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
Step 10: 새로운 스키마 정의 추가
components:
schemas:
# ... (이전 스키마들 유지)
IssueCreate:
type: object
required:
- title
properties:
title:
type: string
body:
type: string
assignees:
type: array
items:
type: string
milestone:
type: integer
labels:
type: array
items:
type: string
Project:
type: object
properties:
id:
type: integer
node_id:
type: string
name:
type: string
number:
type: integer
state:
type: string
body:
type: string
creator:
$ref: '#/components/schemas/User'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
html_url:
type: string
format: uri
Webhook:
type: object
properties:
id:
type: integer
url:
type: string
format: uri
test_url:
type: string
format: uri
ping_url:
type: string
format: uri
name:
type: string
events:
type: array
items:
type: string
active:
type: boolean
config:
type: object
properties:
url:
type: string
format: uri
content_type:
type: string
secret:
type: string
insecure_ssl:
type: string
updated_at:
type: string
format: date-time
created_at:
type: string
format: date-time
Step 11: 응답 예제 추가
components:
schemas:
Project:
# ... (이전 속성들 유지)
example:
id: 1002604
node_id: "MDc6UHJvamVjdDEwMDI2MDQ="
name: "Weekly Planning"
number: 1
state: "open"
body: "This project is used for weekly planning of our team."
creator:
login: "octocat"
id: 1
node_id: "MDQ6VXNlcjE="
avatar_url: "https://github.com/images/error/octocat_happy.gif"
gravatar_id: ""
url: "https://api.github.com/users/octocat"
html_url: "https://github.com/octocat"
type: "User"
site_admin: false
created_at: "2011-04-10T20:09:31Z"
updated_at: "2014-03-03T18:58:10Z"
html_url: "https://github.com/octocat/Hello-World/projects/1"
Webhook:
# ... (이전 속성들 유지)
example:
id: 1
url: "https://api.github.com/repos/octocat/Hello-World/hooks/1"
test_url: "https://api.github.com/repos/octocat/Hello-World/hooks/1/test"
ping_url: "https://api.github.com/repos/octocat/Hello-World/hooks/1/pings"
name: "web"
events: ["push", "pull_request"]
active: true
config:
url: "http://example.com/webhook"
content_type: "json"
insecure_ssl: "0"
updated_at: "2011-09-06T20:39:23Z"
created_at: "2011-09-06T17:26:27Z"
Step 12: 에러 응답 정의 추가
components:
responses:
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
required:
- message
properties:
message:
type: string
documentation_url:
type: string
example:
message: "Not Found"
documentation_url: "https://docs.github.com/rest"
이제 각 경로에 에러 응답을 추가할 수 있습니다. 예를 들어:
paths:
/repos/{owner}/{repo}/issues:
post:
# ... (이전 내용 유지)
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Issue'
'404':
$ref: '#/components/responses/NotFound'
'401':
$ref: '#/components/responses/Unauthorized'
이렇게 확장된 OpenAPI 스키마는 GitHub API의 더 많은 기능을 포함하고 있습니다. Issues, Projects, Webhooks 관련 엔드포인트가 추가되었고, 각각에 대한 상세한 스키마와 예제가 포함되어 있습니다.
또한 공통 에러 응답을 정의하고 재사용함으로써 문서의 일관성을 높이고 중복을 줄였습니다.
이런 방식으로 API 문서를 작성하면 다음과 같은 추가적인 이점이 있습니다:
완전성: API의 더 많은 기능이 문서화되어 있어, 사용자가 전체 API를 이해하는 데 도움이 됩니다.
에러 처리: 공통 에러 응답을 정의함으로써, API 사용자가 에러 상황을 더 잘 처리할 수 있게 됩니다.
웹훅 정보: 웹훅 관련 정보를 포함함으로써, API 사용자가 이벤트 기반 통합을 구현하는 데 도움이 됩니다.
실제 API 문서화 작업에서는 이 외에도 다음과 같은 사항들을 고려해야 합니다:
각 엔드포인트에 대한 상세한 설명 추가
요청 제한(Rate Limiting) 정보 포함
버전 관리 정책 설명
변경 로그(Changelog) 제공
SDK나 라이브러리 정보 제공
인증 및 권한 관리에 대한 상세 가이드
이러한 종합적인 접근 방식을 통해, API 사용자들이 GitHub API를 효과적으로 이해하고 활용할 수 있도록 도울 수 있습니다.