APIドキュメント

第20回 若年者ものづくり競技大会 ウェブデザイン職種 モジュール1

概要

ベースURL

http://m1.userXX.skilljapan.info/api

XX はゼッケン番号(例:ゼッケン番号「1」の場合 http://m1.user01.skilljapan.info/api)。以降、各エンドポイントのパスは /api を起点に記載します。

エンドポイント一覧

メソッドパス説明
GET/api/posts投稿一覧取得
GET/api/posts/{id}投稿詳細取得
POST/api/posts投稿作成
GET/api/categoriesカテゴリ一覧取得

投稿一覧取得API

投稿の一覧を取得します。ホーム画面の投稿一覧表示に使用します。

GET /api/posts

リクエストパラメータ

なし。(検索・フィルタ・並び替えのパラメータは提供されません)

レスポンス

200 OK 投稿オブジェクトの配列を返します。一覧では comments(コメント本体の配列)は含まれず、代わりにコメント数 comments_count が含まれます。

フィールド説明
idnumber投稿ID
titlestring投稿タイトル
contentstring投稿内容
authorstring投稿者名
category_idnumberカテゴリID
categorystringカテゴリ名
image_urlstring | null画像URL(画像がない場合は null
likesnumberいいね数
comments_countnumberコメント数
created_atnull投稿日時(固定データのため常に null
並び替えについて: 新着順・いいね数順の並び替えはフロントエンド側で実装してください。固定データのため created_atnull です。新着順は id の降順を投稿日時の新しい順とみなすなど、フロント側の実装方針で対応してください。

レスポンス例

[
  {
    "id": 1,
    "title": "栗林公園の紅葉が見頃です",
    "content": "高松市の栗林公園に行ってきました。...",
    "author": "香川太郎",
    "category_id": 2,
    "category": "観光スポット",
    "image_url": "https://picsum.photos/id/1015/500/300",
    "likes": 128,
    "comments_count": 3,
    "created_at": null
  },
  {
    "id": 4,
    "title": "高松の子育て支援制度について",
    "content": "高松市に引っ越してきたのですが、...",
    "author": "ママさん",
    "category_id": 4,
    "category": "暮らし",
    "image_url": null,
    "likes": 47,
    "comments_count": 2,
    "created_at": null
  }
]

投稿詳細取得API

指定したIDの投稿詳細を取得します。投稿詳細画面に使用します。一覧と異なり、コメント本体の配列 comments を含みます。

GET /api/posts/{id}

パスパラメータ

パラメータ説明
idnumber投稿ID

レスポンス(成功時)

200 OK

フィールド説明
idnumber投稿ID
titlestring投稿タイトル
contentstring投稿内容
authorstring投稿者名
category_idnumberカテゴリID
categorystringカテゴリ名
image_urlstring | null画像URL(画像がない場合は null
likesnumberいいね数
commentsarrayコメントの配列(下記参照)
comments_countnumberコメント数

comments 配列の各要素:

フィールド説明
authorstringコメント投稿者名
bodystringコメント内容
コメントが 0 件の場合、comments は空配列 []comments_count0 になります。画面上では「コメントがありません」のメッセージを表示してください。

レスポンス例

{
  "id": 1,
  "title": "栗林公園の紅葉が見頃です",
  "content": "高松市の栗林公園に行ってきました。...",
  "author": "香川太郎",
  "category_id": 2,
  "category": "観光スポット",
  "image_url": "https://picsum.photos/id/1015/500/300",
  "likes": 128,
  "comments": [
    { "author": "うどん花子", "body": "掬月亭のお抹茶、最高ですよね!" },
    { "author": "旅好き次郎", "body": "ライトアップの時間帯を教えてください。" },
    { "author": "香川太郎", "body": "日没から21時までライトアップされていますよ。" }
  ],
  "comments_count": 3
}

レスポンス(該当なし)

存在しないIDを指定した場合。404 Not Found

{
  "success": false,
  "message": "投稿が見つかりませんでした"
}

投稿作成API

新規投稿を作成します。新規投稿画面のフォーム送信に使用します。

実際にはデータベースの更新は行われません。 成否は HTTPステータスコードで判断してください(成功時 201)。
POST /api/posts

リクエストヘッダ

Content-Type: application/json

リクエストボディ

フィールド必須バリデーション
titlestring必須・最大255文字
contentstring必須
authorstring必須・最大255文字
category_idnumber必須・整数
image_urlstring任意(文字列)

リクエスト例

{
  "title": "屋島からの絶景",
  "content": "屋島の山頂展望台から瀬戸内海を一望できました。",
  "author": "景色好き",
  "category_id": 2,
  "image_url": "https://picsum.photos/id/1018/500/300"
}

レスポンス(成功時)

201 Created

{
  "success": true,
  "message": "投稿が作成されました"
}
投稿成功後は「投稿が作成されました」をアラートで表示し、ホーム画面に遷移してください。

レスポンス(バリデーションエラー)

必須項目が不足している場合など。422 Unprocessable Entity

{
  "message": "The title field is required.",
  "errors": {
    "title": ["The title field is required."]
  }
}

カテゴリ一覧取得API

カテゴリの一覧を取得します。カテゴリフィルタや新規投稿画面のカテゴリ選択に使用します。

GET /api/categories

リクエストパラメータ

なし。

レスポンス

200 OK カテゴリオブジェクトの配列を返します。

フィールド説明
idnumberカテゴリID
namestringカテゴリ名

レスポンス例

[
  { "id": 1, "name": "グルメ" },
  { "id": 2, "name": "観光スポット" },
  { "id": 3, "name": "イベント" },
  { "id": 4, "name": "暮らし" },
  { "id": 5, "name": "その他" }
]
カテゴリフィルタでは、この一覧の先頭に「すべて」を追加して表示してください。

補足