Skip to content

Articles API

記事管理に関するAPIエンドポイントです。

GET /articles

記事一覧を取得します。

概要

項目内容
説明公開記事の一覧をページネーション付きで取得
認証不要
メソッドGET
パス/v1/articles

パラメータ

クエリパラメータ

パラメータ必須デフォルト説明
pageinteger-ページ番号(1から開始)
page_sizeinteger-101ページあたりの件数(最小1、最大100)
tag_idstring--指定タグIDでフィルタリング
categorytech | life--カテゴリでフィルタリング

レスポンス

成功(200)

json
{
  "apiVersion": "1.0.0",
  "data": {
    "articles": [
      {
        "id": "article_123",
        "title": "Goでマイクロサービスを作る",
        "content": "この記事では...",
        "tagIds": ["tag_001", "tag_002"],
        "category": "tech",
        "created_at": "2024-01-01T10:00:00Z",
        "updated_at": "2024-01-01T10:00:00Z"
      }
    ]
  }
}

エラー一覧

ステータスエラーコード説明
400VALIDATION_ERRORクエリパラメータの値が不正
500INTERNAL_ERRORサーバー内部エラー

実装参照

  • internal/usecase/article/list.go
  • internal/infrastructure/http/echo/handler/article/list.go

POST /articles

新規記事を作成します。

概要

項目内容
説明新規記事を作成します
認証必要
メソッドPOST
パス/v1/articles

リクエスト

ヘッダー

http
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json

リクエストボディ

json
{
  "title": "記事タイトル",
  "content": "記事本文",
  "tagIds": ["tag_001", "tag_002"],
  "category": "tech"
}

フィールド詳細

フィールド必須説明
titlestring記事タイトル
contentstring記事本文
tagIdsstring[]関連タグのID配列
categorytech | life記事カテゴリ

レスポンス

成功(201)

json
{
  "apiVersion": "1.0.0",
  "data": {
    "article": {
      "id": "article_123",
      "title": "記事タイトル",
      "content": "記事本文",
      "tagIds": ["tag_001", "tag_002"],
      "category": "tech",
      "created_at": "2024-01-01T10:00:00Z",
      "updated_at": "2024-01-01T10:00:00Z"
    }
  }
}

エラー一覧

ステータスエラーコード説明
400VALIDATION_ERRORリクエストボディの値が不正
401UNAUTHORIZED認証トークンが無効
409CONFLICT同じタイトルの記事が既に存在
500INTERNAL_ERRORサーバー内部エラー

実装参照

  • internal/usecase/article/create.go
  • internal/infrastructure/http/echo/handler/article/create.go

GET /articles/

指定IDの記事詳細を取得します。

概要

項目内容
説明指定IDの記事詳細を取得します
認証不要
メソッドGET
パス/v1/articles/{article_id}

パラメータ

パスパラメータ

パラメータ必須説明
article_idstring記事ID

レスポンス

成功(200)

json
{
  "apiVersion": "1.0.0",
  "data": {
    "article": {
      "id": "article_123",
      "title": "Goでマイクロサービスを作る",
      "content": "この記事では...",
      "tagIds": ["tag_001", "tag_002"],
      "category": "tech",
      "created_at": "2024-01-01T10:00:00Z",
      "updated_at": "2024-01-01T10:00:00Z"
    }
  }
}

エラー一覧

ステータスエラーコード説明
400VALIDATION_ERRORarticle_idの形式が不正
404NOT_FOUND指定された記事が見つからない
500INTERNAL_ERRORサーバー内部エラー

実装参照

  • internal/usecase/article/get.go
  • internal/infrastructure/http/echo/handler/article/get.go

PUT /articles/

指定IDの記事を更新します。

概要

項目内容
説明指定IDの記事を更新します
認証必要
メソッドPUT
パス/v1/articles/{article_id}

パラメータ

パスパラメータ

パラメータ必須説明
article_idstring記事ID

リクエスト

ヘッダー

http
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json

リクエストボディ

json
{
  "title": "更新されたタイトル",
  "content": "更新された本文",
  "tagIds": ["tag_001", "tag_003"],
  "category": "life"
}

フィールド詳細

フィールド必須説明
titlestring記事タイトル
contentstring記事本文
tagIdsstring[]関連タグのID配列
categorytech | life記事カテゴリ

レスポンス

成功(200)

json
{
  "apiVersion": "1.0.0",
  "data": {
    "article": {
      "id": "article_123",
      "title": "更新されたタイトル",
      "content": "更新された本文",
      "tagIds": ["tag_001", "tag_003"],
      "category": "life",
      "created_at": "2024-01-01T10:00:00Z",
      "updated_at": "2024-01-01T11:00:00Z"
    }
  }
}

エラー一覧

ステータスエラーコード説明
400VALIDATION_ERRORリクエストボディまたはパスパラメータが不正
401UNAUTHORIZED認証トークンが無効
404NOT_FOUND指定された記事が見つからない
500INTERNAL_ERRORサーバー内部エラー

実装参照

  • internal/usecase/article/update.go
  • internal/infrastructure/http/echo/handler/article/update.go

DELETE /articles/

指定IDの記事を削除します。

概要

項目内容
説明指定IDの記事を削除します
認証必要
メソッドDELETE
パス/v1/articles/{article_id}

パラメータ

パスパラメータ

パラメータ必須説明
article_idstring記事ID

リクエスト

ヘッダー

http
Authorization: Bearer <JWT_TOKEN>

レスポンス

成功(204)

レスポンスボディなし

エラー一覧

ステータスエラーコード説明
400VALIDATION_ERRORarticle_idの形式が不正
401UNAUTHORIZED認証トークンが無効
404NOT_FOUND指定された記事が見つからない
500INTERNAL_ERRORサーバー内部エラー

実装参照

  • internal/usecase/article/delete.go
  • internal/infrastructure/http/echo/handler/article/delete.go

データモデル

Article

go
type Article struct {
    ID        string    `json:"id"`
    Title     string    `json:"title"`
    Content   string    `json:"content"`
    TagIDs    []string  `json:"tagIds"`
    Category  string    `json:"category"`
    CreatedAt time.Time `json:"created_at"`
    UpdatedAt time.Time `json:"updated_at"`
}

Category

説明
tech技術関連記事
lifeライフスタイル記事