第20回 若年者ものづくり競技大会 ウェブデザイン職種 モジュール1
GET)のデータはすべて固定です。同じリクエストには常に同じレスポンスが返ります。POST)は実際にはデータベースの更新を行いません。 正しく動作しているかどうかは HTTPステータスコード で判断してください。Content-Type: application/json)です。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 | カテゴリ一覧取得 |
投稿の一覧を取得します。ホーム画面の投稿一覧表示に使用します。
なし。(検索・フィルタ・並び替えのパラメータは提供されません)
200 OK 投稿オブジェクトの配列を返します。一覧では comments(コメント本体の配列)は含まれず、代わりにコメント数 comments_count が含まれます。
| フィールド | 型 | 説明 |
|---|---|---|
id | number | 投稿ID |
title | string | 投稿タイトル |
content | string | 投稿内容 |
author | string | 投稿者名 |
category_id | number | カテゴリID |
category | string | カテゴリ名 |
image_url | string | null | 画像URL(画像がない場合は null) |
likes | number | いいね数 |
comments_count | number | コメント数 |
created_at | null | 投稿日時(固定データのため常に null) |
created_at は null です。新着順は 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
}
]
指定したIDの投稿詳細を取得します。投稿詳細画面に使用します。一覧と異なり、コメント本体の配列 comments を含みます。
| パラメータ | 型 | 説明 |
|---|---|---|
id | number | 投稿ID |
200 OK
| フィールド | 型 | 説明 |
|---|---|---|
id | number | 投稿ID |
title | string | 投稿タイトル |
content | string | 投稿内容 |
author | string | 投稿者名 |
category_id | number | カテゴリID |
category | string | カテゴリ名 |
image_url | string | null | 画像URL(画像がない場合は null) |
likes | number | いいね数 |
comments | array | コメントの配列(下記参照) |
comments_count | number | コメント数 |
comments 配列の各要素:
| フィールド | 型 | 説明 |
|---|---|---|
author | string | コメント投稿者名 |
body | string | コメント内容 |
comments は空配列 []、comments_count は 0 になります。画面上では「コメントがありません」のメッセージを表示してください。
{
"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": "投稿が見つかりませんでした"
}
新規投稿を作成します。新規投稿画面のフォーム送信に使用します。
201)。
Content-Type: application/json
| フィールド | 型 | 必須 | バリデーション |
|---|---|---|---|
title | string | ○ | 必須・最大255文字 |
content | string | ○ | 必須 |
author | string | ○ | 必須・最大255文字 |
category_id | number | ○ | 必須・整数 |
image_url | string | 任意(文字列) |
{
"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."]
}
}
カテゴリの一覧を取得します。カテゴリフィルタや新規投稿画面のカテゴリ選択に使用します。
なし。
200 OK カテゴリオブジェクトの配列を返します。
| フィールド | 型 | 説明 |
|---|---|---|
id | number | カテゴリID |
name | string | カテゴリ名 |
[
{ "id": 1, "name": "グルメ" },
{ "id": 2, "name": "観光スポット" },
{ "id": 3, "name": "イベント" },
{ "id": 4, "name": "暮らし" },
{ "id": 5, "name": "その他" }
]
GET /api/posts で取得した一覧に対してフロントエンド側で実装してください。これらの機能は組み合わせて動作する必要があります。