mockapi/examples/mockapi-collection.bru
2026-03-16 09:00:26 +00:00

756 lines
22 KiB
Text

{
"version": "1",
"name": "MockAPI Collection",
"type": "collection",
"variables": [
{
"name": "baseUrl",
"value": "http://localhost:8000",
"enabled": true
},
{
"name": "adminUsername",
"value": "admin",
"enabled": true
},
{
"name": "adminPassword",
"value": "admin123",
"enabled": true
},
{
"name": "clientId",
"value": "test_client",
"enabled": true
},
{
"name": "clientSecret",
"value": "test_secret",
"enabled": true
},
{
"name": "accessToken",
"value": "",
"enabled": true
},
{
"name": "authCode",
"value": "",
"enabled": true
},
{
"name": "refreshToken",
"value": "",
"enabled": true
},
{
"name": "endpointId",
"value": "",
"enabled": true
},
{
"name": "oauthClientId",
"value": "",
"enabled": true
}
],
"items": [
{
"name": "Health Check",
"type": "http",
"request": {
"url": "{{baseUrl}}/health",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "Admin - Login",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/login",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "username",
"value": "{{adminUsername}}",
"enabled": true
},
{
"name": "password",
"value": "{{adminPassword}}",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"req": "// This will set a session cookie automatically\nconsole.log('Login response headers:', req.headers);"
}
},
{
"name": "Mock Endpoints",
"type": "folder",
"items": [
{
"name": "List Endpoints",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/endpoints",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "Create Mock Endpoint",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/endpoints",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "route",
"value": "/api/greeting/{name}",
"enabled": true
},
{
"name": "method",
"value": "GET",
"enabled": true
},
{
"name": "response_body",
"value": "{\"message\": \"Hello, {{ name }}!\", \"timestamp\": \"{{ timestamp }}\"}",
"enabled": true
},
{
"name": "response_code",
"value": "200",
"enabled": true
},
{
"name": "content_type",
"value": "application/json",
"enabled": true
},
{
"name": "is_active",
"value": "true",
"enabled": true
},
{
"name": "variables",
"value": "{}",
"enabled": true
},
{
"name": "headers",
"value": "{}",
"enabled": true
},
{
"name": "delay_ms",
"value": "0",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"res": "// Extract endpoint ID from response\nconst location = res.headers.location;\nif (location && location.includes('/admin/endpoints/')) {\n const match = location.match(/\\/admin\\/endpoints\\/(\\d+)/);\n if (match) {\n bruno.setVar('endpointId', match[1]);\n console.log('Endpoint ID saved:', match[1]);\n }\n}"
}
},
{
"name": "Call Mock Endpoint",
"type": "http",
"request": {
"url": "{{baseUrl}}/api/greeting/World",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "Call Mock Endpoint with Query",
"type": "http",
"request": {
"url": "{{baseUrl}}/api/greeting/World?format=json",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "Update Endpoint",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/endpoints/{{endpointId}}",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "route",
"value": "/api/greeting/{name}",
"enabled": true
},
{
"name": "method",
"value": "GET",
"enabled": true
},
{
"name": "response_body",
"value": "{\"message\": \"Hello, {{ name }}! Welcome to MockAPI.\", \"timestamp\": \"{{ timestamp }}\"}",
"enabled": true
},
{
"name": "response_code",
"value": "200",
"enabled": true
},
{
"name": "content_type",
"value": "application/json",
"enabled": true
},
{
"name": "is_active",
"value": "true",
"enabled": true
},
{
"name": "variables",
"value": "{}",
"enabled": true
},
{
"name": "headers",
"value": "{}",
"enabled": true
},
{
"name": "delay_ms",
"value": "100",
"enabled": true
}
]
},
"auth": {}
}
},
{
"name": "Delete Endpoint",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/endpoints/{{endpointId}}/delete",
"method": "POST",
"headers": [],
"body": {},
"auth": {}
}
}
]
},
{
"name": "OAuth2",
"type": "folder",
"items": [
{
"name": "Create OAuth Client (via Admin)",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/oauth/clients",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "client_name",
"value": "Test Client",
"enabled": true
},
{
"name": "redirect_uris",
"value": "http://localhost:8080/callback,https://example.com/cb",
"enabled": true
},
{
"name": "grant_types",
"value": "authorization_code,client_credentials,refresh_token",
"enabled": true
},
{
"name": "scopes",
"value": "openid profile email api:read api:write",
"enabled": true
},
{
"name": "is_active",
"value": "true",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"res": "// Extract client ID from response\n// Note: In real usage, you'd get the client ID from the admin UI or API response\nconsole.log('Client created. Set clientId and clientSecret variables manually.');"
}
},
{
"name": "Client Credentials Grant",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/token",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
},
{
"name": "Authorization",
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "grant_type",
"value": "client_credentials",
"enabled": true
},
{
"name": "scope",
"value": "api:read",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"res": "// Save access token\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('Access token saved:', data.access_token.substring(0, 20) + '...');\n}"
}
},
{
"name": "Authorization Code Grant - Step 1: Get Auth Code",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/authorize",
"method": "GET",
"headers": [],
"params": [
{
"name": "response_type",
"value": "code",
"enabled": true
},
{
"name": "client_id",
"value": "{{clientId}}",
"enabled": true
},
{
"name": "redirect_uri",
"value": "http://localhost:8080/callback",
"enabled": true
},
{
"name": "scope",
"value": "api:read openid",
"enabled": true
},
{
"name": "state",
"value": "xyz123",
"enabled": true
}
],
"body": {},
"auth": {}
},
"script": {
"res": "// Extract authorization code from redirect location\n// Note: This requires manual extraction from the redirect URL\nconsole.log('Check redirect location header for authorization code');\nconst location = res.headers.location;\nif (location) {\n console.log('Redirect URL:', location);\n // In Bruno, you'd parse the URL to get the code\n}"
}
},
{
"name": "Authorization Code Grant - Step 2: Exchange Code for Token",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/token",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "grant_type",
"value": "authorization_code",
"enabled": true
},
{
"name": "code",
"value": "{{authCode}}",
"enabled": true
},
{
"name": "redirect_uri",
"value": "http://localhost:8080/callback",
"enabled": true
},
{
"name": "client_id",
"value": "{{clientId}}",
"enabled": true
},
{
"name": "client_secret",
"value": "{{clientSecret}}",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"res": "// Save tokens\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('Access token saved:', data.access_token.substring(0, 20) + '...');\n}"
}
},
{
"name": "Refresh Token Grant",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/token",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "grant_type",
"value": "refresh_token",
"enabled": true
},
{
"name": "refresh_token",
"value": "{{refreshToken}}",
"enabled": true
},
{
"name": "client_id",
"value": "{{clientId}}",
"enabled": true
},
{
"name": "client_secret",
"value": "{{clientSecret}}",
"enabled": true
}
]
},
"auth": {}
},
"script": {
"res": "// Save new tokens\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('New access token saved:', data.access_token.substring(0, 20) + '...');\n}"
}
},
{
"name": "User Info",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/userinfo",
"method": "GET",
"headers": [
{
"name": "Authorization",
"value": "Bearer {{accessToken}}",
"enabled": true
}
],
"body": {},
"auth": {}
}
},
{
"name": "Token Introspection",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/introspect",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
},
{
"name": "Authorization",
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "token",
"value": "{{accessToken}}",
"enabled": true
}
]
},
"auth": {}
}
},
{
"name": "Token Revocation",
"type": "http",
"request": {
"url": "{{baseUrl}}/oauth/revoke",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
},
{
"name": "Authorization",
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "token",
"value": "{{accessToken}}",
"enabled": true
}
]
},
"auth": {}
}
},
{
"name": "OpenID Connect Discovery",
"type": "http",
"request": {
"url": "{{baseUrl}}/.well-known/openid-configuration",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
}
]
},
{
"name": "Admin OAuth Management",
"type": "folder",
"items": [
{
"name": "List OAuth Clients",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/oauth/clients",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "List OAuth Tokens",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/oauth/tokens",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "List OAuth Users",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/oauth/users",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
}
]
},
{
"name": "Protected Endpoint Example",
"type": "folder",
"items": [
{
"name": "Create OAuth-Protected Endpoint",
"type": "http",
"request": {
"url": "{{baseUrl}}/admin/endpoints",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded",
"enabled": true
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"name": "route",
"value": "/api/protected/data",
"enabled": true
},
{
"name": "method",
"value": "GET",
"enabled": true
},
{
"name": "response_body",
"value": "{\"data\": \"This is protected data\", \"timestamp\": \"{{ timestamp }}\"}",
"enabled": true
},
{
"name": "response_code",
"value": "200",
"enabled": true
},
{
"name": "content_type",
"value": "application/json",
"enabled": true
},
{
"name": "is_active",
"value": "true",
"enabled": true
},
{
"name": "requires_oauth",
"value": "true",
"enabled": true
},
{
"name": "oauth_scopes",
"value": "[\"api:read\"]",
"enabled": true
},
{
"name": "variables",
"value": "{}",
"enabled": true
},
{
"name": "headers",
"value": "{}",
"enabled": true
},
{
"name": "delay_ms",
"value": "0",
"enabled": true
}
]
},
"auth": {}
}
},
{
"name": "Call Protected Endpoint (Unauthorized)",
"type": "http",
"request": {
"url": "{{baseUrl}}/api/protected/data",
"method": "GET",
"headers": [],
"body": {},
"auth": {}
}
},
{
"name": "Call Protected Endpoint (Authorized)",
"type": "http",
"request": {
"url": "{{baseUrl}}/api/protected/data",
"method": "GET",
"headers": [
{
"name": "Authorization",
"value": "Bearer {{accessToken}}",
"enabled": true
}
],
"body": {},
"auth": {}
}
}
]
}
]
}