@zauto/api-connector
v0.0.3
Published
A NestJS-based API connector for managing integrations.
Readme
API Connector Package
A dynamic and flexible TypeScript-based API connector package designed to facilitate seamless integration between a local database and external APIs. The package includes features like dynamic field mapping, endpoint configuration, and robust authentication support.
Features
- Dynamic API Configuration: Manage API settings like base URL, authentication, and headers dynamically.
- Endpoint Management: Configure endpoints with methods, headers, and field mappings.
- Field Mapping: Dynamically map request and response fields for six resources:
Patient,Physician,Facility,Schedule,Slot, andAppointment. - Authentication: Supports multiple authentication types (
BASIC,BEARER,API_KEY, orNONE). - Retry and Timeout Policies: Define retry strategies and request timeouts for robust communication.
- Prisma Integration: Leverages Prisma for database interactions with models such as
ApiConfig,EndpointConfig, andFieldMapping.
Installation
Install the package using npm:
npm install <package-name>Database Design
Models
- ApiConfig: Stores the top-level configuration for APIs.
- EndpointConfig: Manages endpoint-specific configurations linked to an API.
- FieldMapping: Handles request and response field mappings for endpoints.
Example Schema
model ApiConfig {
id String @id @default(uuid())
baseUrl String
authType String
infoForAuthType Json @default("{}")
defaultHeaders Json @default("{}")
timeout Int?
environment String?
retryPolicy Json @default("{}")
orgId String?
doneBy String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
endpoints EndpointConfig[]
}
model EndpointConfig {
id String @id @default(uuid())
name String
method String
suburl String
headers Json @default("{}")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
apiConfigId String
apiConfig ApiConfig @relation(fields: [apiConfigId], references: [id])
FieldMapping FieldMapping[]
@@unique([name, apiConfigId])
}
model FieldMapping {
id String @id @default(uuid())
resourceType ResourceType
requestMapping Json?
responseMapping Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
endpointId String
endpoint EndpointConfig @relation(fields: [endpointId], references: [id])
}
enum ResourceType {
Patient
Physician
Facility
Schedule
Slot
Appointment
}Usage
API Configuration
Use saveApiConfig to save or update API configurations dynamically:
import { PrismaClient } from '@prisma/client';
import { saveApiConfig } from '<package-name>';
const prisma = new PrismaClient();
const apiConfig = {
baseUrl: 'https://api.example.com',
authType: 'BEARER',
infoForAuthType: { token: 'your-token' },
};
const result = await saveApiConfig(prisma, apiConfig, { orgId: '123' });
console.log(result);Endpoint Configuration
Save or update endpoint configurations linked to an API configuration:
import { saveEndpointConfig } from '<package-name>';
const endpointConfig = {
name: 'getPatients',
method: 'GET',
suburl: '/patients',
apiConfigId: 'api-config-id',
};
const result = await saveEndpointConfig(prisma, endpointConfig);
console.log(result);Field Mapping
Configure dynamic mappings for request and response data:
import { saveFieldMapping } from '<package-name>';
const fieldMapping = {
resourceType: 'Patient',
requestMapping: { localField1: 'apiField1', localField2: 'apiField2' },
responseMapping: { apiField1: 'localField1', apiField2: 'localField2' },
endpointId: 'endpoint-id',
};
const result = await saveFieldMapping(prisma, fieldMapping);
console.log(result);API Call with Dynamic Mapping
Make API calls with dynamic field mapping applied to request and response data:
import { callApiWithMapping } from '<package-name>';
const response = await callApiWithMapping(prisma, 'endpoint-id', {
localField1: 'value1',
});
console.log(response);Authentication Types
- BASIC: Username and password authentication.
- BEARER: Token-based authentication.
- API_KEY: API key authentication.
- NONE: No authentication.
Development
Directory Structure
/src
/dto
api-config.dto.ts
endpoint-config.dto.ts
field-mapping.dto.ts
index.tsExported Functions
saveApiConfigupdateApiConfigsaveEndpointConfigsaveFieldMappingcallApiWithMapping
Contributing
Contributions are welcome! Submit issues or pull requests on GitHub.
License
Let me know if there are additional details or changes you'd like to make!
