ð ã«ããŽãªãµãŒãã¹
Category ãµãŒãã¹ã¯ãã¹ããŒã¿ã¹å¶åŸ¡ä»ãã®éå±€ã«ããŽãªã管çããå®å šãª REST API ãæäŸããŸããNodeblocks ã®é¢æ°åæã¢ãããŒããš MongoDB çµ±åã䜿çšããProduct ã«ããŽãªãã³ã³ãã³ãåé¡ãçµç¹æ§é ãæ±ãããèšèšãããŠããŸãã
ð ã¯ã€ãã¯ã¹ã¿ãŒãâ
import express from 'express';
import {middlewares, services, drivers} from '@nodeblocks/backend-sdk';
const {nodeBlocksErrorMiddleware} = middlewares;
const {categoryService} = services;
const {withMongo} = drivers;
const connectToDatabase = withMongo('mongodb://localhost:27017/?authSource=admin', 'dev', 'user', 'password');
express()
.use(
categoryService(
{
...(await connectToDatabase('categories')),
...(await connectToDatabase('identities')),
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
authMode: 'bearer', // or 'cookie',
identity: {
typeIds: {
admin: '100',
guest: '000',
regular: '001',
},
},
},
),
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));
ð ãšã³ããã€ã³ãæŠèŠâ
ã«ããŽãªæäœâ
| ã¡ãœãã | Path | 説æ | èªèšŒãå¿ èŠ |
|---|---|---|---|
POST | /categories | æ°ããã«ããŽãªãäœæ | â Admin |
GET | /categories/:categoryId | ID ã§ã«ããŽãªãååŸ | â |
GET | /categories | ãã¹ãŠã®ã«ããŽãªãäžèŠ§è¡šç€º | â |
PATCH | /categories/:categoryId | ã«ããŽãªãæŽæ° | â Admin |
DELETE | /categories/:categoryId | ã«ããŽãªãåé€ | â Admin |
ã¹ããŒã¿ã¹ç®¡çæäœâ
| ã¡ãœãã | Path | 説æ | èªèšŒãå¿ èŠ |
|---|---|---|---|
POST | /categories/:categoryId/enable | ã«ããŽãªãæå¹åïŒã¹ããŒã¿ã¹ã 'active' ã«èšå®ïŒ | â Admin |
POST | /categories/:categoryId/disable | ã«ããŽãªãç¡å¹åïŒã¹ããŒã¿ã¹ã 'inactive' ã«èšå®ïŒ | â Admin |
ðïž ãšã³ãã£ãã£ã¹ããŒãâ
ã«ããŽãªãšã³ãã£ãã£ã¯ãããŒã¹ãã£ãŒã«ãïŒèªåçæïŒãšã«ããŽãªåºæããŒã¿ãçµã¿åãããŸã:
{
"name": "string",
"description": "string",
"status": "string",
"parent": "string",
"createdAt": "string (datetime)",
"id": "string",
"updatedAt": "string (datetime)"
}
ãã£ãŒã«ã詳现â
| ãã£ãŒã«ã | å | èªåçæ | å¿ é | 説æ |
|---|---|---|---|---|
name | string | â | â | ã«ããŽãªå |
description | string | â | â | ã«ããŽãªèª¬æ |
status | string | â | â | ã«ããŽãªã¹ããŒã¿ã¹ ('active', 'inactive', etc.) |
parent | string | â | â | éå±€æ§é çšã®èŠªã«ããŽãª ID |
createdAt | datetime | â | â | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | â | â | äžæã®èå¥åïŒUUIDïŒ |
updatedAt | datetime | â | â | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
ð æ³š: èªåçæãã£ãŒã«ãã¯ãµãŒãã¹ãèšå®ãããããäœæïŒæŽæ°ãªã¯ãšã¹ãã«å«ããªãã§ãã ããã
parentãã£ãŒã«ãã«ããéå±€ã«ããŽãªæ§é ã䜿çšã§ããŸãã
ð èªèšŒããããŒâ
ä¿è·ããããšã³ããã€ã³ãã§ã¯ã次ã®ããããŒãå«ããŸã:
Authorization: Bearer <admin_access_token>
x-nb-fingerprint: <device_fingerprint>
â ïž éèŠ: èªå¯æã«ãã£ã³ã¬ãŒããªã³ããæå®ãããå Žåããã¹ãŠã®èªèšŒæžã¿ãªã¯ãšã¹ãã§
x-nb-fingerprintããããŒãå¿ é ã§ãããªãå Žåããªã¯ãšã¹ã㯠401 Unauthorized ãè¿ããŸãã
ð§ API ãšã³ããã€ã³ãâ
1. ã«ããŽãªäœæâ
æå®ããæ å ±ã§æ°ããã«ããŽãªãäœæããŸãã
ãªã¯ãšã¹ã:
- Method:
POST - Path:
/categories - Headers:
Content-Type: application/jsonAuthorization: Bearer <token>x-nb-fingerprint: <device-fingerprint>
- èªå¯: Bearer ããŒã¯ã³ãå¿ èŠïŒç®¡çè ïŒ
ãªã¯ãšã¹ãæ¬æ:
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
name | string | â | ã«ããŽãªå |
description | string | â | ã«ããŽãªèª¬æ |
status | string | â | ã«ããŽãªã¹ããŒã¿ã¹ |
parent | string | â | 芪ã«ããŽãª IDïŒéå±€æ§é çšïŒ |
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
name | string | ã«ããŽãªå |
description | string | ã«ããŽãªèª¬æ |
status | string | ã«ããŽãªã¹ããŒã¿ã¹ |
parent | string | 芪ã«ããŽãª IDïŒè©²åœããå ŽåïŒ |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | äžæã®ã«ããŽãªèå¥å |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ: èªåé©çšïŒ
nameãdescriptionãstatusãå¿ é ïŒ - ã«ãŒãããªããŒã¿ãŒ:
- èªèšŒæžã¿ãªã¯ãšã¹ãïŒãã¢ã©ãŒããŒã¯ã³ïŒãå¿ èŠ
- 管çè ããŒã«ãå¿ èŠ
ãªã¯ãšã¹ãäŸ:
curl -X POST http://localhost:8089/categories \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: <device-fingerprint>" \
-d '{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active"
}'
ãªã¯ãšã¹ãäŸïŒèŠªããïŒ:
curl -X POST http://localhost:8089/categories \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: <device-fingerprint>" \
-d '{
"name": "Smartphones",
"description": "Mobile phones and accessories",
"status": "active",
"parent": "682f4a3e-e37e-4480-bc36-dda085e7ce26"
}'
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
ãªã¯ãšã¹ãããã£ããŸã£ãããªãå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "Request body is required"
}
}
ãªã¯ãšã¹ãããã£ã«å¿ é ãã£ãŒã«ãããªãå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'description'",
"request body must have required property 'status'"
]
}
}
èªèšŒã«å€±æããå Žå:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error": {
"message": "Token fails security check"
}
}
2. ID ã«ããã«ããŽãªååŸâ
äžæã® ID ã§æå®ããã«ããŽãªãååŸããŸãã
ãªã¯ãšã¹ã:
- Method:
GET - Path:
/categories/:categoryId - Authorization: äžèŠ
URL ãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
categoryId | string | â | äžæã®ã«ããŽãªèå¥å |
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
name | string | ã«ããŽãªå |
description | string | ã«ããŽãªèª¬æ |
status | string | ã«ããŽãªã¹ããŒã¿ã¹ |
parent | string | Parent category ID (if applicable) |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | äžæã®ã«ããŽãªèå¥å |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ:
categoryIdãã¹ãã©ã¡ãŒã¿ãŒãæ€èšŒ - ã«ãŒãããªããŒã¿ãŒ:
- ã«ããŽãªãååšããããšãæ€èšŒ
ãªã¯ãšã¹ãäŸ:
curl http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
ãªã¯ãšã¹ãããã£ããŸã£ãããªãå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "Request body is required"
}
}
æå®ãã ID ã®ã«ããŽãªãååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "Category does not exist"
}
}
3. ã«ããŽãªäžèЧâ
ãã¹ãŠã®ã«ããŽãªã®ãªã¹ããååŸããŸãã
ãªã¯ãšã¹ã:
- Method:
GET - Path:
/categories - Authorization: äžèŠ
ã¯ãšãªãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
name | string | â | ã«ããŽãªåã§ãã£ã«ã¿ãŒ |
description | string | â | 説æã§ãã£ã«ã¿ãŒ |
parent | string | â | 芪ã«ããŽãª ID ã§ãã£ã«ã¿ãŒ |
status | string | â | ã¹ããŒã¿ã¹ã§ãã£ã«ã¿ãŒ |
page | number | â | ããŒãžããŒã·ã§ã³çšã®ããŒãžçªå·ïŒ1ïœ1000ïŒ |
limit | number | â | ããŒãžãããã®ä»¶æ°ïŒ1ïœ50ïŒ |
ã¬ã¹ãã³ã¹æ¬æ: ã«ããŽãªé åãšã¡ã¿ããŒã¿ãå«ãããŒãžããŒã·ã§ã³æžã¿ã¬ã¹ãã³ã¹ã
ã¬ã¹ãã³ã¹æ§é :
{
"data": [
{
"name": "string",
"description": "string",
"status": "string",
"parent": "string",
"createdAt": "string",
"id": "string",
"updatedAt": "string"
}
],
"metadata": {
"pagination": {
"page": number,
"limit": number,
"total": number,
"totalPages": number,
"hasNext": boolean,
"hasPrev": boolean
}
}
}
æ€èšŒ:
- ã¹ããŒãæ€èšŒ:
nameãdescriptionãparentãstatusãããŒãžããŒã·ã§ã³ïŒpageãlimitïŒã®ã¯ãšãªãã©ã¡ãŒã¿ãæ€èšŒ - ã«ãŒãããªããŒã¿ãŒ: ãªã
ãªã¯ãšã¹ãäŸ:
ãã¹ãŠã®ã«ããŽãªãäžèŠ§è¡šç€º:
curl http://localhost:8089/categories
ã¹ããŒã¿ã¹ã§ãã£ã«ã¿ãŒ:
curl "http://localhost:8089/categories?status=active"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
},
{
"name": "Smartphones",
"description": "Mobile phones and accessories",
"status": "active",
"parent": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"createdAt": "2025-07-07T07:46:17.133Z",
"id": "4260c15e-7791-4f09-a846-b6ffa3a73101",
"updatedAt": "2025-07-07T07:46:17.133Z"
}
],
"metadata": {
"pagination": {
"page": 1,
"limit": 10,
"total": 2,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}
}
ããŒãžããŒã·ã§ã³ä»ããªã¯ãšã¹ãäŸ:
curl "http://localhost:8089/categories?page=1&limit=10"
4. ã«ããŽãªæŽæ°â
éšåããŒã¿ã§æ¢åã®ã«ããŽãªãæŽæ°ããŸãã
ãªã¯ãšã¹ã:
- Method:
PATCH - Path:
/categories/:categoryId - Headers:
Content-Type: application/json - èªå¯: å¿ é ïŒç®¡çè ïŒ
URL ãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
categoryId | string | â | äžæã®ã«ããŽãªèå¥å |
ãªã¯ãšã¹ãæ¬æïŒãã¹ãŠä»»æïŒ:
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
name | string | â | ã«ããŽãªå |
description | string | â | ã«ããŽãªèª¬æ |
parent | string | â | 芪ã«ããŽãª ID |
â ïž éèŠ:
statusãã£ãŒã«ãã¯æŽæ°ãªã¯ãšã¹ãã§ã¯äœ¿çšã§ããŸãããã¹ããŒã¿ã¹ã®å€æŽã«ã¯å°çšã®æå¹åïŒç¡å¹åãšã³ããã€ã³ãã䜿çšããŠãã ããã
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
name | string | æŽæ°åŸã®ã«ããŽãªå |
description | string | æŽæ°åŸã®ã«ããŽãªèª¬æ |
status | string | ã«ããŽãªã¹ããŒã¿ã¹ïŒå€æŽãããŸããïŒ |
parent | string | æŽæ°åŸã®èŠªã«ããŽãª IDïŒè©²åœããå ŽåïŒ |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | äžæã®ã«ããŽãªèå¥å |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ: èªåé©çšïŒéšåæŽæ°ãæå®ã§ãããã£ãŒã«ãã¯éå®ãããŸãïŒ
- ã«ãŒãããªããŒã¿ãŒ:
- èªèšŒæžã¿ãªã¯ãšã¹ãïŒãã¢ã©ãŒããŒã¯ã³ïŒãå¿ èŠ
- 管çè ããŒã«ãå¿ èŠ
- ã«ããŽãªãååšããããšãæ€èšŒ
ãªã¯ãšã¹ãäŸ:
curl -X PATCH http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-d '{"description": "Updated electronic devices and accessories"}'
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "Electronics",
"description": "Updated electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:46:50.017Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
ãªã¯ãšã¹ãããã£ããŸã£ãããªãå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "Request body is required"
}
}
æå®ãã ID ã®ã«ããŽãªãååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "Category does not exist"
}
}
ãªã¯ãšã¹ãããã£ã«èš±å¯ãããªããã£ãŒã«ããå«ãŸããå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "Validation Error",
"data": [
"request body must NOT have additional properties"
]
}
}
5. ã«ããŽãªåé€â
ã·ã¹ãã ããã«ããŽãªãå®å šã«åé€ããŸãã
ãªã¯ãšã¹ã:
- Method:
DELETE - Path:
/categories/:categoryId - èªå¯: å¿ é ïŒç®¡çè ïŒ
URL ãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
categoryId | string | â | äžæã®ã«ããŽãªèå¥å |
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
| ã¬ã¹ãã³ã¹ããã£ãªã | - | åé€ãšã³ããã€ã³ãã¯æåæã«ã¬ã¹ãã³ã¹ããã£ãè¿ããŸãã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ:
categoryIdãã¹ãã©ã¡ãŒã¿ãŒãæ€èšŒ - ã«ãŒãããªããŒã¿ãŒ:
- èªèšŒæžã¿ãªã¯ãšã¹ãïŒãã¢ã©ãŒããŒã¯ã³ïŒãå¿ èŠ
- 管çè ããŒã«ãå¿ èŠ
- ã«ããŽãªãååšããããšãæ€èšŒ
ãªã¯ãšã¹ãäŸ:
curl -X DELETE http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26 \
-H "Authorization: Bearer <admin_token>"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 204 No Content
ãšã©ãŒã¬ã¹ãã³ã¹:
æå®ãã ID ã®ã«ããŽãªãååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "Category does not exist"
}
}
ð ã¹ããŒã¿ã¹ç®¡çæäœâ
ã«ããŽãªãµãŒãã¹ã¯ãã«ããŽãªã¹ããŒã¿ã¹ç®¡ççšã®å°çšãšã³ããã€ã³ããæäŸããŸãã
6. ã«ããŽãªæå¹åâ
ã«ããŽãªã®ã¹ããŒã¿ã¹ã 'active' ã«èšå®ããŸãã
ãªã¯ãšã¹ã:
- Method:
POST - Path:
/categories/:categoryId/enable - èªå¯: å¿ é ïŒç®¡çè ïŒ
URL ãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
categoryId | string | â | äžæã®ã«ããŽãªèå¥å |
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
| ã¬ã¹ãã³ã¹ããã£ãªã | - | æå¹åãšã³ããã€ã³ãã¯æåæã«ã¬ã¹ãã³ã¹ããã£ãè¿ããŸãã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ:
categoryIdãã¹ãã©ã¡ãŒã¿ãŒãæ€èšŒ - ã«ãŒãããªããŒã¿ãŒ:
- èªèšŒæžã¿ãªã¯ãšã¹ãïŒãã¢ã©ãŒããŒã¯ã³ïŒãå¿ èŠ
- 管çè ããŒã«ãå¿ èŠ
- ã«ããŽãªãååšããããšãæ€èšŒ
ãªã¯ãšã¹ãäŸ:
curl -X POST http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26/enable \
-H "Authorization: Bearer <admin_token>"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 204 No Content
7. ã«ããŽãªç¡å¹åâ
ã«ããŽãªã®ã¹ããŒã¿ã¹ã 'inactive' ã«èšå®ããŸãã
ãªã¯ãšã¹ã:
- Method:
POST - Path:
/categories/:categoryId/disable - èªå¯: å¿ é ïŒç®¡çè ïŒ
URL ãã©ã¡ãŒã¿ãŒ:
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
categoryId | string | â | äžæã®ã«ããŽãªèå¥å |
ã¬ã¹ãã³ã¹æ¬æ:
| ãã£ãŒã«ã | å | 説æ |
|---|---|---|
| ã¬ã¹ãã³ã¹ããã£ãªã | - | ç¡å¹åãšã³ããã€ã³ãã¯æåæã«ã¬ã¹ãã³ã¹ããã£ãè¿ããŸãã |
æ€èšŒ:
- ã¹ããŒãæ€èšŒ:
categoryIdãã¹ãã©ã¡ãŒã¿ãŒãæ€èšŒ - ã«ãŒãããªããŒã¿ãŒ:
- èªèšŒæžã¿ãªã¯ãšã¹ãïŒãã¢ã©ãŒããŒã¯ã³ïŒãå¿ èŠ
- 管çè ããŒã«ãå¿ èŠ
- ã«ããŽãªãååšããããšãæ€èšŒ
ãªã¯ãšã¹ãäŸ:
curl -X POST http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26/disable \
-H "Authorization: Bearer <admin_token>"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 204 No Content
ðš ãšã©ãŒåŠçâ
ãã¹ãŠã® Category ãµãŒãã¹ãšã©ãŒã¯ãé©å㪠HTTP ã¹ããŒã¿ã¹ã³ãŒãä»ãã® JSON 圢åŒã§è¿ãããŸã:
å ±éãšã©ãŒã³ãŒãâ
| ã¹ããŒã¿ã¹ | ãšã©ãŒã¡ãã»ãŒãž | 説æ |
|---|---|---|
| 400 | Validation Error | ãªã¯ãšã¹ãæ¬æã®åœ¢åŒãäžæ£ããŸãã¯å¿ é ãã£ãŒã«ããäžè¶³ |
| 400 | Request body is required | ãªã¯ãšã¹ãæ¬æããŸã£ãããªã |
| 400 | request body must have required property 'name' | ãªã¯ãšã¹ãæ¬æã« name ãã£ãŒã«ãããªã |
| 400 | request body must have required property 'description' | ãªã¯ãšã¹ãæ¬æã« description ãã£ãŒã«ãããªã |
| 400 | request body must have required property 'status' | ãªã¯ãšã¹ãæ¬æã« status ãã£ãŒã«ãããªã |
| 400 | request body must NOT have additional properties | ãªã¯ãšã¹ãã«æªå¯Ÿå¿ã®ãã£ãŒã«ããå«ãŸãã |
| 400 | Failed to create category | ããŒã¿ããŒã¹æ¿å ¥æäœããæ¿å ¥æžã¿ ID ãè¿ãããªãã£ã |
| 400 | Failed to update category | æŽæ°æäœã«ããããŒã¿å€æŽããªãã£ã |
| 401 | Invalid token | èªèšŒãã€ããŒããæå¹ãªãŠãŒã¶ãŒã¢ã¯ã»ã¹ããŒã¯ã³ã§ã¯ãªã |
| 401 | token could not be verified | èªå¯ããŒã¯ã³ããªãããŸãã¯ç¡å¹ |
| 401 | Token fails security check | ããŒã¯ã³ã®ã»ãã¥ãªãã£æ€èšŒã«å€±æ |
| 403 | Identity is not authorized to access this resource | å¿ èŠãªçš®å¥æš©éïŒç®¡çè ã¢ã¯ã»ã¹ïŒããªã |
| 404 | Category does not exist | ä¿è·ãããã«ãŒãã§ doesCategoryExist ããªããŒã¿ãŒãè¿ãïŒååŸãæŽæ°ãåé€ãæå¹åãç¡å¹åïŒ |
| 404 | Category not found | ããªããŒã¿ãŒãçµç±ããã«ããŽãªãã³ãã©ãŒã«å°éããå Žåã«è¿ã |
| 500 | Failed to create category | äœæäžã®ããŒã¿ããŒã¹æ¥ç¶åé¡ããŸãã¯äºæããªã倱æ |
| 500 | Failed to get category | ååŸäžã®ããŒã¿ããŒã¹æ¥ç¶åé¡ããŸãã¯äºæããªã倱æ |
| 500 | Failed to find categories | äžèЧååŸäžã®ããŒã¿ããŒã¹æ¥ç¶åé¡ãç¡å¹ãªãã£ã«ã¿ãŒæ§æããŸãã¯äºæããªã倱æ |
| 500 | Failed to update category | æŽæ°äžã®ããŒã¿ããŒã¹æ¥ç¶åé¡ããŸãã¯äºæããªã倱æ |
| 500 | Failed to delete category | åé€äžã®ããŒã¿ããŒã¹æ¥ç¶åé¡ããŸãã¯äºæããªã倱æ |
ãšã©ãŒã¬ã¹ãã³ã¹åœ¢åŒâ
{
"error": {
"message": "ãšã©ãŒã¡ãã»ãŒãžã®èª¬æ",
"data": ["远å ã®ãšã©ãŒè©³çް"]
}
}
æ€èšŒãšã©ãŒã«ã¯è¿œå ã®è©³çްãå«ãŸããŸã:
{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'description'",
"request body must have required property 'status'"
]
}
}
âïž æ§æãªãã·ã§ã³â
ãµãŒãã¹æ§æâ
interface CategoryServiceConfiguration {
authSecrets: {
authEncSecret: string; // JWT æå·åã·ãŒã¯ã¬ãã
authSignSecret: string; // JWT 眲åã·ãŒã¯ã¬ãã
};
authMode?: 'bearer' | 'cookie'; // æªæå®æã¯ãã¢ã©ãŒèªèšŒ
identity?: {
typeIds?: {
admin: string;
guest: string;
regular: string;
};
};
}
ðª Cookie èªèšŒ:
authMode: 'cookie'ã®å Žåãä¿è·ãããã«ãŒã㯠Cookie ããã¢ã¯ã»ã¹ããŒã¯ã³ãèªã¿åããŸãããã¹ãã¢ããªã¯cookie-parserãç»é²ããå¿ èŠããããŸãã
ããŒã¿ã¹ãã¢â
| ã³ã¬ã¯ã·ã§ã³ | å¿ é | 説æ |
|---|---|---|
categories | â | ã«ããŽãªããã¥ã¡ã³ã |
identities | â | ã¢ã€ãã³ãã£ãã£æ€çŽ¢ïŒèªèšŒã³ã³ããã¹ã |
ð é¢é£ããã¥ã¡ã³ãâ
- 補åãµãŒãã¹ - 補å管çæäœ
- 屿§ãµãŒãã¹ - 屿§ç®¡çæäœ
- ãããã£ãŒã«ãµãŒãã¹ - ãããã£ãŒã«ç®¡çæäœ
- çµç¹ãµãŒãã¹ - çµç¹ç®¡çæäœ
- èªèšŒãµãŒãã¹ - èªèšŒãšèªå¯
- ãšã©ãŒåŠç - ãšã©ãŒãã¿ãŒã³ã®çè§£
- ã¹ããŒãã³ã³ããŒãã³ã - ããŒã¿æ€èšŒã®æŠå¿µ
- ã«ã¹ã¿ã ãµãŒãã¹ãã¥ãŒããªã¢ã« - ç¬èªãµãŒãã¹ã®æ§ç¯