Why Choose @phrasecode/odata?
Build powerful RESTful APIs with standardized querying capabilities
OData v4 Compliant
Full support for OData v4 protocol including $filter, $select,$expand, $orderby, $top, $skip, and $count query options with automatic metadata generation.
Sequelize-Powered
Built on Sequelize ORM with support for PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, and Oracle. Leverage the power of a mature ORM ecosystem.
TypeScript Decorators
Define models using intuitive TypeScript decorators. Get full type safety, IntelliSense support, and compile-time validation for your data models.
Express Integration
Seamless integration with Express.js through ExpressRouter. Set up OData endpoints in minutes with minimal configuration.
Flexible Controllers
Control access with ODataControler allowing you to specify which HTTP methods are permitted (GET) per model.
Auto Metadata
Automatic /$metadata endpoint generation based on your models. Full EDMX support for client tools and OData consumers.
Quick Example
Get started in minutes with a simple, intuitive API
import {
Model,
Table,
Column,
DataTypes,
DataSource,
ExpressRouter,
ODataControler,
} from '@phrasecode/odata';
import express from 'express';
// Define a model
@Table({ tableName: 'products' })
class Product extends Model<Product> {
@Column({
dataType: DataTypes.INTEGER,
isPrimaryKey: true,
isAutoIncrement: true,
})
id: number;
@Column({ dataType: DataTypes.STRING })
name: string;
@Column({ dataType: DataTypes.DECIMAL })
price: number;
}
// Create data source
const dataSource = new DataSource({
dialect: 'postgres',
database: 'mydb',
username: 'user',
password: 'password',
host: 'localhost',
models: [Product],
});
// Set up Express with OData
const app = express();
const productController = new ODataControler({
model: Product,
allowedMethod: ['get', 'post', 'patch', 'delete'],
});
new ExpressRouter(app, {
controllers: [productController],
dataSource
});
app.listen(3000);
// Query examples:
// GET /Product?$filter=price gt 50
// GET /Product?$orderby=price desc&$top=5
// GET /Product?$select=name,price
// GET /$metadata