ð·ïž 屿§ãµãŒãã¹
屿§ãµãŒãã¹ (attributesService) ã¯ãããŒããªã¥ãŒãã¢ã«ãã屿§ã°ã«ãŒãã®ç®¡çããã®å®å
šãª REST API ãæäŸããŸããNodeblocks ã®é¢æ°åã³ã³ããžã·ã§ã³ã¢ãããŒããš MongoDB çµ±åã䜿çšããŠãåå屿§ãã«ããŽãªããããã£ãããã³ãã®ä»ã®æ§é åã¡ã¿ããŒã¿ãåŠçããããã«èšèšãããŠããŸãã
ð ã¯ã€ãã¯ã¹ã¿ãŒãâ
import express from 'express';
import {middlewares, services, drivers} from '@nodeblocks/backend-sdk';
const {nodeBlocksErrorMiddleware} = middlewares;
const {attributesService} = services;
const {withMongo} = drivers;
const connectToDatabase = withMongo('mongodb://localhost:27017/?authSource=admin', 'dev', 'user', 'password');
express()
.use(
attributesService(
{
...(await connectToDatabase('attributes')),
...(await connectToDatabase('identities')),
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
authMode: 'bearer', // ãŸã㯠'cookie'
identity: {
typeIds: {
admin: '100',
guest: '000',
regular: '001',
},
},
},
),
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));
ð ãšã³ããã€ã³ãäžèЧâ
屿§ã°ã«ãŒãæäœâ
| ã¡ãœãã | ãã¹ | 説æ | èªèšŒå¿ èŠ |
|---|---|---|---|
POST | /attributes | æ°ãã屿§ã°ã«ãŒããäœæ | â 管çè |
GET | /attributes/:attributeId | ID ã§å±æ§ã°ã«ãŒããååŸ | â ãªã |
GET | /attributes | 屿§ã°ã«ãŒãã®äžèЧ/ãã£ã«ã¿ | â ãªã |
PATCH | /attributes/:attributeId | 屿§ã°ã«ãŒããæŽæ° | â 管çè |
DELETE | /attributes/:attributeId | 屿§ã°ã«ãŒããåé€ | â 管çè |
ðïž ãšã³ãã£ãã£ã¹ããŒãâ
屿§ã°ã«ãŒããšã³ãã£ãã£ã¯ãåºæ¬ãã£ãŒã«ãïŒèªåçæïŒï¿œï¿œï¿œå±æ§åºæã®ããŒã¿ãçµã¿åãããŸã:
{
"name": "string",
"items": [
{
"key": "string",
"value": "string"
}
],
"createdAt": "string (datetime)",
"id": "string",
"updatedAt": "string (datetime)"
}
ãã£ãŒã«ã詳现â
| ãã£ãŒã«ã | ã¿ã€ã | èªåçæ | å¿ é | 説æ |
|---|---|---|---|---|
name | string | â | â | 屿§ã°ã«ãŒãå |
items | array | â | â | ããŒããªã¥ãŒãã¢ã®é åïŒæå°1é ç®ïŒ |
items[].key | string | â | â | 屿§ããŒ/åå |
items[].value | string | â | â | 屿§å€ |
createdAt | datetime | â | â | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | â | â | ãŠããŒã¯èå¥åïŒUUIDïŒ |
updatedAt | datetime | â | â | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
ð æ³š: èªåçæãã£ãŒã«ãã¯ãµãŒãã¹ã«ãã£ãŠèšå®ãããäœæ/æŽæ°ãªã¯ãšã¹ãã«å«ãŸããŠããŠã¯ãªããŸããã
itemsé åã«ã¯å°ãªããšã1ã€ã®ããŒããªã¥ãŒãã¢ãå«ããå¿ èŠããããŸãã
ð èªèšŒããããŒâ
ãã¢ã©ãŒèªèšŒã®ãªã¯ãšã¹ãã«ã¯ã以äžã®ããããŒãå«ããŠãã ãã:
Authorization: Bearer <admin_access_token>
x-nb-fingerprint: <device_fingerprint>
â ïž éèŠ:
x-nb-fingerprintããããŒã¯ãèªèšŒæã«ãã£ã³ã¬ãŒããªã³ããæå®ãããå Žåããã¢ã©ãŒèªèšŒãªã¯ãšã¹ãã«å¿ é ã§ããã¯ãããŒã¢ãŒãã§ã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ã¯AuthorizationããããŒã§ã¯ãªãaccessTokenã¯ãããŒããèªã¿åãããŸãã
ð§ API ãšã³ããã€ã³ãâ
1. 屿§ã°ã«ãŒãã®äœæâ
æäŸãããååãšããŒããªã¥ãŒãã¢ã§æ°ãã屿§ã°ã«ãŒããäœæããŸãã
ãªã¯ãšã¹ã:
- ã¡ãœãã:
POST - ãã¹:
/attributes - ããããŒ:
Content-Type: application/jsonAuthorization: Bearer <token>x-nb-fingerprint: <device-fingerprint>
- èªèšŒ: 管çè ããŒã«ãå¿ èŠ
ãªã¯ãšã¹ãããã£:
| ãã£ãŒã«ã | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
name | string | â | 屿§ã°ã«ãŒãå |
items | array | â | ããŒããªã¥ãŒãã¢ã®é å |
items[].key | string | â | 屿§ããŒ/åå |
items[].value | string | â | 屿§å€ |
ã¬ã¹ãã³ã¹ããã£:
| ãã£ãŒã«ã | ã¿ã€ã | 説æ |
|---|---|---|
name | string | 屿§ã°ã«ãŒãå |
items | array | ããŒããªã¥ãŒãã¢ã®é å |
items[].key | string | 屿§ããŒ/åå |
items[].value | string | 屿§å€ |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
ããªããŒã·ã§ã³:
- ã¹ããŒãããªããŒã·ã§ã³: èªåçã«é©çšïŒname, items å¿ é ã远å ããããã£äžå¯ïŒ
- ã«ãŒãããªããŒã¿:
- èªèšŒæžã¿ãªã¯ãšã¹ããèŠæ±ïŒãã¢ã©ãŒããŒã¯ã³ïŒ
- 管çè ããŒã«ãèŠæ±
ã¢ã€ãã ããªããŒã·ã§ã³: å°ãªããšã1ã€ã®ã¢ã€ãã ãå«ã¿ãããããã«å¿ é ã® key ãš value ãå¿ èŠã§ãã
äŸãªã¯ãšã¹ã:
curl -X POST {{host}}/attributes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: test-device-fingerprint" \
-d '{
"name": "åå仿§",
"items": [
{
"key": "è²",
"value": "é"
},
{
"key": "ãµã€ãº",
"value": "倧"
},
{
"key": "çŽ æ",
"value": "ç¶¿"
}
]
}'
æåã¬ã¹ãã³ã¹:
HTTP/1.1 201 Created
Content-Type: application/json
{
"name": "åå仿§",
"items": [
{
"key": "è²",
"value": "é"
},
{
"key": "ãµã€ãº",
"value": "倧"
},
{
"key": "çŽ æ",
"value": "ç¶¿"
}
],
"createdAt": "2025-07-07T08:52:49.796Z",
"id": "69b013c9-cb20-4a7e-9c1f-59a55db1d949",
"updatedAt": "2025-07-07T08:52:49.796Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
å¿ é ãã£ãŒã«ããæ¬ èœããŠããå Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "ããªããŒã·ã§ã³ãšã©ãŒ",
"data": [
"ãªã¯ãšã¹ãããã£ã«å¿
é ãããã㣠'items' ããããŸãã"
]
}
}
ã¢ã€ãã é åã空ã®å Žå:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"message": "ããªããŒã·ã§ã³ãšã©ãŒ",
"data": [
"ãªã¯ãšã¹ãããã£ã¯1å以äžã®ã¢ã€ãã ãæã€å¿
èŠããããŸã"
]
}
}
èªèšŒã倱æããå Žå:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error": {
"message": "ããŒã¯ã³ãæ€èšŒã§ããŸããã§ãã"
}
}
2. ID ã§å±æ§ã°ã«ãŒããååŸâ
äžæã® ID ã«ãã£ãŠç¹å®ã®å±æ§ã°ã«ãŒããååŸããŸãã
ãªã¯ãšã¹ã:
- ã¡ãœãã:
GET - ãã¹:
/attributes/:attributeId - ããããŒ: ãªã
- èªèšŒ: äžèŠ
URL ãã©ã¡ãŒã¿:
| ãã©ã¡ãŒã¿ | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
attributeId | string | â | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
ã¬ã¹ãã³ã¹ããã£:
| ãã£ãŒã«ã | ã¿ã€ã | 説æ |
|---|---|---|
name | string | 屿§ã°ã«ãŒãå |
items | array | ããŒããªã¥ãŒãã¢ã®é å |
items[].key | string | 屿§ããŒ/åå |
items[].value | string | 屿§å€ |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
ããªããŒã·ã§ã³:
- ã¹ããŒãããªããŒã·ã§ã³: ãã¹ãã©ã¡ãŒã¿ã® attributeId ã§ããªããŒã·ã§ã³
- ã«ãŒãããªããŒã¿: ãªã
äŸãªã¯ãšã¹ã:
curl {{host}}/attributes/69b013c9-cb20-4a7e-9c1f-59a55db1d949
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "åå仿§",
"items": [
{
"key": "è²",
"value": "é"
},
{
"key": "ãµã€ãº",
"value": "倧"
},
{
"key": "çŽ æ",
"value": "ç¶¿"
}
],
"createdAt": "2025-07-07T08:52:49.796Z",
"id": "69b013c9-cb20-4a7e-9c1f-59a55db1d949",
"updatedAt": "2025-07-07T08:52:49.796Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
æå®ããã ID ã®å±æ§ã°ã«ãŒããååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "屿§ã°ã«ãŒããèŠã€ãããŸãã"
}
}
3. 屿§ã°ã«ãŒãã®äžèЧâ
ãªãã·ã§ã³ã®ãã£ã«ã¿ãšããŒãžããŒã·ã§ã³ã§å±æ§ã°ã«ãŒãã®äžèЧãååŸããŸãã
ãªã¯ãšã¹ã:
- ã¡ãœãã:
GET - ãã¹:
/attributes - ããããŒ: ãªã
- èªèšŒ: äžèŠ
ã¯ãšãªãã©ã¡ãŒã¿:
| ãã©ã¡ãŒã¿ | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
name | string | â | 屿§ã°ã«ãŒãåã§ãã£ã«ã¿ |
page | number | â | ããŒãžããŒã·ã§ã³ã®ããŒãžçªå·ïŒ1-1000ïŒ |
limit | number | â | ããŒãžãããã®ã¢ã€ãã æ°ïŒ1-50ïŒ |
ã¬ã¹ãã³ã¹ããã£: 屿§ã°ã«ãŒãé åãšã¡ã¿ããŒã¿ãå«ãããŒãžããŒã·ã§ã³ã¬ã¹ãã³ã¹ã
ã¬ã¹ãã³ã¹æ§é :
{
"data": [
{
"name": "string",
"items": [
{
"key": "string",
"value": "string"
}
],
"createdAt": "string",
"id": "string",
"updatedAt": "string"
}
],
"metadata": {
"pagination": {
"page": number,
"limit": number,
"total": number,
"totalPages": number,
"hasNext": boolean,
"hasPrev": boolean
}
}
}
ããªããŒã·ã§ã³:
- ã¹ããŒãããªããŒã·ã§ã³: ã¯ãšãªãã©ã¡ãŒã¿ã® name ãšããŒãžããŒã·ã§ã³ïŒpage, limitïŒã§ããªããŒã·ã§ã³
- ã«ãŒãããªããŒã¿: ãªã
äŸãªã¯ãšã¹ã:
ãã¹ãŠã®å±æ§ã°ã«ãŒããäžèЧ:
curl {{host}}/attributes
ååã§ãã£ã«ã¿:
curl "{{host}}/attributes?name=åå"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{
"name": "åå仿§",
"items": [
{
"key": "è²",
"value": "é"
},
{
"key": "ãµã€ãº",
"value": "倧"
}
],
"createdAt": "2025-07-07T08:52:49.796Z",
"id": "69b013c9-cb20-4a7e-9c1f-59a55db1d949",
"updatedAt": "2025-07-07T08:52:49.796Z"
},
{
"name": "æè¡è©³çް",
"items": [
{
"key": "éé",
"value": "2.5kg"
},
{
"key": "寞æ³",
"value": "30x20x15cm"
}
],
"createdAt": "2025-07-07T08:20:45.456Z",
"id": "b2c3d4e5-f6g7-8901-bcde-f23456789012",
"updatedAt": "2025-07-07T08:20:45.456Z"
}
],
"metadata": {
"pagination": {
"page": 1,
"limit": 10,
"total": 2,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}
}
ããŒãžããŒã·ã§ã³äŸãªã¯ãšã¹ã:
curl "{{host}}/attributes?page=1&limit=10"
4. 屿§ã°ã«ãŒãã®æŽæ°â
æ¢åã®å±æ§ã°ã«ãŒããæŽæ°ããŸããæ³š: ã¹ããŒãã«ãããšãname ãã£ãŒã«ãã®ã¿ãæŽæ°å¯èœã§ã â items é
åã¯æŽæ°ãšã³ããã€ã³ããéããŠå€æŽã§ããŸããã
ãªã¯ãšã¹ã:
- ã¡ãœãã:
PATCH - ãã¹:
/attributes/:attributeId - ããããŒ:
Content-Type: application/jsonAuthorization: Bearer <token>x-nb-fingerprint: <device-fingerprint>
- èªèšŒ: 管çè ããŒã«ãå¿ èŠ
URL ãã©ã¡ãŒã¿:
| ãã©ã¡ãŒã¿ | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
attributeId | string | â | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
ãªã¯ãšã¹ãããã£:
| ãã£ãŒã«ã | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
name | string | â | æ°ãã屿§ã°ã«ãŒãå |
JSON ããã£ã¯ååšã空ã§ãã£ãŠã¯ãªããŸãããååãã¹ããŒãã§ãªãã·ã§ã³ã§ãã空ã®ããã£
{}ãŸãã¯æ¬ èœããããã£ã¯"ãªã¯ãšã¹ãããã£ãå¿ èŠã§ã"ã§400ãè¿ããŸãã
ã¬ã¹ãã³ã¹ããã£:
| ãã£ãŒã«ã | ã¿ã€ã | 説æ |
|---|---|---|
name | string | æŽæ°ããã屿§ã°ã«ãŒãå |
items | array | ããŒããªã¥ãŒãã¢ã®é åïŒå€æŽãªãïŒ |
items[].key | string | 屿§ããŒ/åå |
items[].value | string | 屿§å€ |
createdAt | string | äœæã¿ã€ã ã¹ã¿ã³ã |
id | string | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
updatedAt | string | æçµæŽæ°ã¿ã€ã ã¹ã¿ã³ã |
ããªããŒã·ã§ã³:
- ã¹ããŒãããªããŒã·ã§ã³: èªåçã«é©çšïŒname ãã£ãŒã«ãã®ã¿èš±å¯ã远å ããããã£äžå¯ïŒ
- ã«ãŒãããªããŒã¿:
- èªèšŒæžã¿ãªã¯ãšã¹ããèŠæ±ïŒãã¢ã©ãŒããŒã¯ã³ïŒ
- 管çè ããŒã«ãèŠæ±
â ïž éèŠ: æŽæ°ã¹ããŒãã¯
nameãã£ãŒã«ãã®æŽæ°ã®ã¿ãèš±å¯ããŸããitemsé åã倿Žããã«ã¯ã屿§ã°ã«ãŒããåé€ããŠåçæããå¿ èŠããããŸãã
äŸãªã¯ãšã¹ã:
curl -X PATCH {{host}}/attributes/69b013c9-cb20-4a7e-9c1f-59a55db1d949 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: test-device-fingerprint" \
-d '{"name": "æŽæ°ãããåå仿§"}'
æåã¬ã¹ãã³ã¹:
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "æŽæ°ãããåå仿§",
"items": [
{
"key": "è²",
"value": "é"
},
{
"key": "ãµã€ãº",
"value": "倧"
},
{
"key": "çŽ æ",
"value": "ç¶¿"
}
],
"createdAt": "2025-07-07T08:52:49.796Z",
"id": "69b013c9-cb20-4a7e-9c1f-59a55db1d949",
"updatedAt": "2025-07-07T08:54:07.406Z"
}
ãšã©ãŒã¬ã¹ãã³ã¹:
æå®ããã ID ã®å±æ§ã°ã«ãŒããååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "屿§ã°ã«ãŒããèŠã€ãããŸãã"
}
}
èªèšŒã倱æããå Žå:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error": {
"message": "ããŒã¯ã³ãæ€èšŒã§ããŸããã§ãã"
}
}
5. 屿§ã°ã«ãŒãã®åé€â
屿§ã°ã«ãŒããã·ã¹ãã ããå®å šã«åé€ããŸãã
ãªã¯ãšã¹ã:
- ã¡ãœãã:
DELETE - ãã¹:
/attributes/:attributeId - ããããŒ:
Authorization: Bearer <token>x-nb-fingerprint: <device-fingerprint>
- èªèšŒ: 管çè ããŒã«ãå¿ èŠ
URL ãã©ã¡ãŒã¿:
| ãã©ã¡ãŒã¿ | ã¿ã€ã | å¿ é | 説æ |
|---|---|---|---|
attributeId | string | â | ãŠããŒã¯ãªå±æ§ã°ã«ãŒãID |
ã¬ã¹ãã³ã¹ããã£:
| ãã£ãŒã«ã | ã¿ã€ã | 説æ |
|---|---|---|
| ã¬ã¹ãã³ã¹ããã£ãªã | - | åé€ãšã³ããã€ã³ãã¯æåæã«ã¬ã¹ãã³ã¹ããã£ãè¿ããŸãã |
ããªããŒã·ã§ã³:
- ã¹ããŒãããªããŒã·ã§ã³: ãã¹ãã©ã¡ãŒã¿ã® attributeId ã§ããªããŒã·ã§ã³
- ã«ãŒãããªããŒã¿:
- èªèšŒæžã¿ãªã¯ãšã¹ããèŠæ±ïŒãã¢ã©ãŒããŒã¯ã³ïŒ
- 管çè ããŒã«ãèŠæ±
äŸãªã¯ãšã¹ã:
curl -X DELETE {{host}}/attributes/69b013c9-cb20-4a7e-9c1f-59a55db1d949 \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: test-device-fingerprint"
æåã¬ã¹ãã³ã¹:
HTTP/1.1 204 No Content
ãšã©ãŒã¬ã¹ãã³ã¹:
æå®ããã ID ã®å±æ§ã°ã«ãŒããååšããªãå Žå:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": {
"message": "屿§ãèŠã€ãããŸãã"
}
}
èªèšŒã倱æããå Žå:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"error": {
"message": "ããŒã¯ã³ãæ€èšŒã§ããŸããã§ãã"
}
}
âïž èšå®ãªãã·ã§ã³â
ãµãŒãã¹ããŒã¿ã¹ãã¢â
interface AttributesServiceDataStore {
attributes: Collection; // å¿
é - 屿§ã°ã«ãŒãã³ã¬ã¯ã·ã§ã³
identities: Collection; // å¿
é - èªèšŒã³ã³ããã¹ãçšã¢ã€ãã³ãã£ãã£
}
ãµãŒãã¹èšå®â
interface AttributesServiceConfiguration {
authSecrets: {
authEncSecret: string; // JWT æå·åã·ãŒã¯ã¬ãã
authSignSecret: string; // JWT 眲åã·ãŒã¯ã¬ãã
};
authMode?: 'bearer' | 'cookie'; // ããã©ã«ã: æªèšå®ã®å Žåãã¢ã©ãŒåäœ
identity?: {
typeIds?: {
admin: string; // 管çè
ãŠãŒã¶ãŒã¿ã€ãèå¥å
guest: string; // ã²ã¹ããŠãŒã¶ãŒã¿ã€ãèå¥å
regular: string; // äžè¬ãŠãŒã¶ãŒã¿ã€ãèå¥å
};
};
}
èšå®è©³çްâ
屿§ãµãŒãã¹èšå®ã¯ãã»ãã¥ãªãã£ãšãŠãŒã¶ãŒã¿ã€ã管çã®è«çã°ã«ãŒãã«æŽçãããŠããŸãã
ð ã»ãã¥ãªãã£èšå®â
authSecrets â JWT ããŒã¯ã³ã»ãã¥ãªãã£ã·ãŒã¯ã¬ãã
- ã¿ã€ã:
{ authEncSecret: string; authSignSecret: string } - 説æ: JWT æå·åãšçœ²åçšã®ã·ãŒã¯ã¬ããããŒïŒããŒã¯ã³æ€èšŒã«äœ¿çšïŒ
- å¿ é : ã¯ãïŒæ¬çªçšïŒ
- åããããã£:
authEncSecret: JWT ãã€ããŒãæå·åçšã®ã·ãŒã¯ã¬ããããŒauthSignSecret: JWT çœ²åæ€èšŒçšã®ã·ãŒã¯ã¬ããããŒ
ð¥ ãŠãŒã¶ãŒã¿ã€ãèšå®â
identity.typeIds â ãŠãŒã¶ãŒã¿ã€ãèå¥åèšå®
- ã¿ã€ã:
{ admin: string; guest: string; regular: string } - 説æ: ããŒã«ããŒã¹ã¢ã¯ã»ã¹å¶åŸ¡çšã®ã«ã¹ã¿ã ãŠãŒã¶ãŒã¿ã€ãèå¥å
- ããã©ã«ã:
undefinedïŒãªããžã§ã¯ãã¯ãªãã·ã§ã³ã§ãããååšããå ŽåcheckIdentityTypeã¯3ã€ã®ããŒãã¹ãŠãèŠæ±ããŸãïŒ - åããããã£:
admin: 管çè ãŠãŒã¶ãŒã¿ã€ãèå¥å- ã¿ã€ã:
string - 説æ: 管çè ãŠãŒã¶ãŒçšã®ã«ã¹ã¿ã èå¥å
- ãŠãŒã¹ã±ãŒã¹: 管çæäœã®ããŒã«ããŒã¹ã¢ã¯ã»ã¹å¶åŸ¡
- äŸ:
"admin","administrator","superuser"
- ã¿ã€ã:
guest: ã²ã¹ããŠãŒã¶ãŒã¿ã€ãèå¥å- ã¿ã€ã:
string - 説æ: ã²ã¹ããŠãŒã¶ãŒçšã®ã«ã¹ã¿ã èå¥å
- ãŠãŒã¹ã±ãŒã¹: èªèšŒæžã¿ãŸãã¯äžæçãªãŠãŒã¶ãŒã®å¶éä»ãã¢ã¯ã»ã¹
- äŸ:
"guest","visitor","anonymous"
- ã¿ã€ã:
regular: äžè¬ãŠãŒã¶ãŒã¿ã€ãèå¥å- ã¿ã€ã:
string - 説æ: äžè¬ãŠãŒã¶ãŒçšã®ã«ã¹ã¿ã èå¥å
- ãŠãŒã¹ã±ãŒã¹: æšæºãŠãŒã¶ãŒã¢ã¯ã»ã¹æš©é
- äŸ:
"user","member","customer"
- ã¿ã€ã:
äŸèšå®â
const attributesConfig = {
authSecrets: {
authEncSecret: process.env.AUTH_ENC_SECRET || 'your-enc-secret',
authSignSecret: process.env.AUTH_SIGN_SECRET || 'your-sign-secret',
},
identity: {
typeIds: {
admin: 'administrator',
guest: 'visitor',
regular: 'member',
},
},
};
ðš ãšã©ãŒãã³ããªã³ã°â
ãã¹ãŠã®å±æ§ãµãŒãã¹ãšã©ãŒã¯é©å㪠HTTP ã¹ããŒã¿ã¹ã³ãŒãã§ JSON ãã©ãŒãããã§è¿ãããŸã:
äžè¬çãªãšã©ãŒã³ãŒãâ
| ã¹ããŒã¿ã¹ | ãšã©ãŒã¡ãã»ãŒãž | 説æ |
|---|---|---|
| 400 | ããªããŒã·ã§ã³ãšã©ãŒ | ãªã¯ãšã¹ãããã£ã®ãã©ãŒããããç¡å¹ãŸãã¯å¿ é ãã£ãŒã«ããæ¬ èœ |
| 400 | ãªã¯ãšã¹ãããã£ã«å¿ é ãããã㣠'name' ããããŸãã | ãªã¯ãšã¹ãããã£ã« name ãã£ãŒã«ããæ¬ èœ |
| 400 | ãªã¯ãšã¹ãããã£ã«å¿ é ãããã㣠'items' ããããŸãã | ãªã¯ãšã¹ãããã£ã« items é åãæ¬ èœ |
| 400 | ãªã¯ãšã¹ãããã£ã¯1å以äžã®ã¢ã€ãã ãæã€å¿ èŠããããŸã | ã¢ã€ãã é åãç©ºïŒæå°1é ç®å¿ èŠïŒ |
| 400 | ãªã¯ãšã¹ãããã£ã¯è¿œå ããããã£ãæã£ãŠã¯ãããŸãã | ãªã¯ãšã¹ãã«ãµããŒããããŠããªããã£ãŒã«ããå«ãŸããŠããŸã |
| 400 | 屿§ã°ã«ãŒãã®äœæã«å€±æããŸãã | ããŒã¿ããŒã¹æ¿å ¥æäœãæ¿å ¥IDãè¿ããªã |
| 400 | 屿§ã°ã«ãŒãã®æŽæ°ã«å€±æããŸãã | æŽæ°æäœãããŒã¿ã倿ŽããªãïŒå€æŽãªãæ€åºïŒ |
| 401 | ããŒã¯ã³ãæ€èšŒã§ããŸããã§ãã | æ¬ èœãŸãã¯ç¡å¹ãªèªèšŒããŒã¯ã³ |
| 401 | ç¡å¹ãªããŒã¯ã³ | checkIdentityType ã§ã®ãŠãŒã¶ãŒã¢ã¯ã»ã¹ããŒã¯ã³æ€èšŒã§ããŒã¯ã³ã倱æ |
| 403 | ã¢ã€ãã³ãã£ãã£ã¯ãã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããæš©éããããŸãã | ã¢ã€ãã³ãã£ãã£ã«å¿ èŠãªã¿ã€ãã®æš©éããããŸããïŒç®¡çè ã¢ã¯ã»ã¹ïŒ |
| 404 | 屿§ãèŠã€ãããŸãã | èŠæ±ãããæäœã«å¯ŸããŠå±æ§ã°ã«ãŒããååšããªã |
| 500 | 屿§ã°ã«ãŒãã®äœæäžã«äžæãªãšã©ãŒ | ããŒã¿ããŒã¹æ¥ç¶åé¡ãŸãã¯äœæäžã®äºæãã¬å€±æ |
| 500 | 屿§ã°ã«ãŒãã®ååŸã«å€±æããŸãã | ããŒã¿ããŒã¹æ¥ç¶åé¡ãŸãã¯ååŸäžã®äºæãã¬å€±æ |
| 500 | 屿§ã®æ€çŽ¢ã«å€±æããŸãã | ããŒã¿ããŒã¹æ¥ç¶åé¡ãç¡å¹ãªãã£ã«ã¿ãŒæ§æããŸãã¯äžèЧäžã®äºæãã¬å€±æ |
| 500 | 屿§ã°ã«ãŒãã®æŽæ°ã«å€±æããŸãã | ããŒã¿ããŒã¹æ¥ç¶åé¡ãŸãã¯æŽæ°äžã®äºæãã¬å€±æ |
| 500 | 屿§ã®åé€ã«å€±æããŸãã | ããŒã¿ããŒã¹æ¥ç¶åé¡ãŸãã¯åé€äžã®äºæãã¬å€±æ |
ãšã©ãŒã¬ã¹ãã³ã¹ãã©ãŒãããâ
{
"error": {
"message": "ãšã©ãŒã¡ãã»ãŒãžã®èª¬æ",
"data": ["远å ã®ãšã©ãŒè©³çް"]
}
}
ããªããŒã·ã§ã³ãšã©ãŒ ã¯è¿œå 詳现ãå«ã¿ãŸã:
{
"error": {
"message": "ããªããŒã·ã§ã³ãšã©ãŒ",
"data": [
"ãªã¯ãšã¹ãããã£ã«å¿
é ãããã㣠'name' ããããŸãã",
"ãªã¯ãšã¹ãããã£ã«å¿
é ãããã㣠'items' ããããŸãã",
"ãªã¯ãšã¹ãããã£ã¯1å以äžã®ã¢ã€ãã ãæã€å¿
èŠããããŸã"
]
}
}
ð é¢é£ããã¥ã¡ã³ãâ
- ååãµãŒãã¹ - åå管çæäœ
- ãããã£ãŒã«ãµãŒãã¹ - ãããã£ãŒã«ç®¡çæäœ
- çµç¹ãµãŒãã¹ - çµç¹ç®¡çæäœ
- èªèšŒãµãŒãã¹ - èªèšŒãšèªå¯
- ãšã©ãŒãã³ããªã³ã° - ãšã©ãŒãã¿ãŒã³ã®çè§£
- ã¹ããŒãã³ã³ããŒãã³ã - ããŒã¿ããªããŒã·ã§ã³ã®æŠå¿µ
- ã«ã¹ã¿ã ãµãŒãã¹ãã¥ãŒããªã¢ã« - ç¬èªã®ãµãŒãã¹ãæ§ç¯