GET /api/articles?filters[title][$contains]=strapi GET /api/articles?sort=publishedAt:desc GET /api/articles?pagination[page]=1&pagination[pageSize]=10 GET /api/articles?populate=author,categories Return only needed fields:
Custom route: POST /api/orders/checkout Custom controller logic: designing web apis with strapi pdf free download
const request = require('supertest'); const strapi = require('@strapi/strapi'); describe('Article API', () => beforeAll(async () => await strapi().load(); ); GET /api/articles
| Problem | Solution | |---------|----------| | N+1 queries | Use populate deeply or custom SQL views | | Exposed admin panel | Change /admin path, add IP whitelist | | Slow startup | Disable unused plugins, optimize DB indexes | | Over-fetching | Use GraphQL or sparse fieldsets | 13. Conclusion Strapi accelerates API development dramatically — from hours to minutes. By understanding its auto-generated endpoints , query parameters , security layers , and extensibility (custom controllers/services), you can design production-grade web APIs faster than with traditional frameworks. // src/api/article/controllers/article
// src/api/article/controllers/article.js module.exports = async find(ctx) ctx.query = ...ctx.query, populate: 'author' ; return await strapi.entityService.findMany('api::article.article', ctx.query); ; Use content-type validators or custom policies:
mutation createArticle(data: title: "New API", content: "..." ) data id