Making API Calls ​
This guide covers how to make API calls to your backend using Flowfull Client.
HTTP Methods ​
Flowfull Client supports all standard HTTP methods:
typescript
import { createFlowfull } from '@pubflow/flowfull-client';
const api = createFlowfull('https://api.example.com');
// GET request
const users = await api.get('/users');
// POST request
const newUser = await api.post('/users', {
name: 'John Doe',
email: 'john@example.com'
});
// PUT request (full update)
const updated = await api.put('/users/123', {
name: 'Jane Doe',
email: 'jane@example.com'
});
// PATCH request (partial update)
const patched = await api.patch('/users/123', {
name: 'Jane Smith'
});
// DELETE request
await api.delete('/users/123');GET Requests ​
Basic GET ​
typescript
const users = await api.get('/users');
console.log(users);GET with Query Parameters ​
typescript
const users = await api.get('/users', {
params: {
page: 1,
limit: 10,
status: 'active'
}
});
// Requests: /users?page=1&limit=10&status=activeGET Single Item ​
typescript
const user = await api.get('/users/123');
console.log(user);POST Requests ​
Create New Item ​
typescript
const newUser = await api.post('/users', {
name: 'John Doe',
email: 'john@example.com',
role: 'user'
});
console.log('Created user:', newUser);POST with Form Data ​
typescript
const formData = new FormData();
formData.append('name', 'John Doe');
formData.append('email', 'john@example.com');
formData.append('avatar', fileInput.files[0]);
const user = await api.post('/users', formData);PUT Requests ​
Full update (replaces entire resource):
typescript
const updated = await api.put('/users/123', {
name: 'Jane Doe',
email: 'jane@example.com',
role: 'admin'
});PATCH Requests ​
Partial update (updates only specified fields):
typescript
const updated = await api.patch('/users/123', {
name: 'Jane Smith' // Only update name
});DELETE Requests ​
typescript
await api.delete('/users/123');
console.log('User deleted');Query Builder ​
For complex queries, use the query builder:
typescript
const users = await api.query('/users')
.filter('status', 'active')
.filter('role', 'admin')
.orderBy('created_at', 'desc')
.limit(10)
.execute();Filter Operations ​
typescript
// Equal
.filter('status', 'active')
// Not equal
.filter('status', 'ne', 'inactive')
// Greater than
.filter('age', 'gt', 18)
// Less than
.filter('age', 'lt', 65)
// Greater than or equal
.filter('age', 'gte', 18)
// Less than or equal
.filter('age', 'lte', 65)
// Like (contains)
.filter('name', 'like', 'John')
// In array
.filter('role', 'in', ['admin', 'moderator'])
// Not in array
.filter('status', 'nin', ['banned', 'deleted'])Sorting ​
typescript
// Ascending
.orderBy('name', 'asc')
// Descending
.orderBy('created_at', 'desc')
// Multiple sorts
.orderBy('status', 'asc')
.orderBy('name', 'asc')Pagination ​
typescript
// Using limit and offset
.limit(10)
.offset(20)
// Using page
.page(3)
.limit(10)Complete Example ​
typescript
const activeAdmins = await api.query('/users')
.filter('status', 'active')
.filter('role', 'admin')
.filter('age', 'gte', 18)
.orderBy('created_at', 'desc')
.limit(20)
.page(1)
.execute();Error Handling ​
typescript
try {
const users = await api.get('/users');
console.log(users);
} catch (error: any) {
if (error.status === 401) {
console.error('Unauthorized - please login');
} else if (error.status === 404) {
console.error('Not found');
} else if (error.status === 500) {
console.error('Server error');
} else {
console.error('Error:', error.message);
}
}Next Steps ​
- Query Builder - Learn more about the query builder
- Data Fetching - Advanced data fetching patterns
- TypeScript Usage - Get the most out of TypeScript