RESTful API vs REST API: Is There Actually a Difference?
What is REST? REST (Representational State Transfer) is an architectural style , not a protocol or a standard. It was introduced by Roy Fielding in…
Tech news from the best sources
What is REST? REST (Representational State Transfer) is an architectural style , not a protocol or a standard. It was introduced by Roy Fielding in…
Give an AI coding agent a small task: add voucher activation to an existing subscription system. The generated code might look reasonable. The endpo…
Lean has one word that I like because it is brutally simple: Muda . Waste. In a factory, waste is often visible. Extra movement. Waiting. Too much i…
Three articles ago I wrote that the Postgres role which runs your migrations bypasses every row-level security policy, unless the table has FORCE RO…
Doppar 4.0 is out today. I want to start this post with something I haven't said out loud before. Doppar 3.0 was a good framework, but if you put it…
The container I had, the container I don't have, and what I do instead. 👋 I'm Anton - a software engineer working mostly in PHP/Symfony and Go, curr…
Two articles ago I wrote that the Postgres role which runs your migrations bypasses every row-level security policy. Last week I wrote that with one…
Symfony shipped a TUI component in 8.1 — a widget tree, a layout engine and a renderer for building full-screen terminal applications in PHP. One th…
So, it's been half a year since the first stable version of Symfony JSON Schema Validation Bundle was released, which turned out to be version 3. So…
TL;DR What: In coopcycle-web — the open-source logistics and marketplace platform that worker-owned courier co-operatives self-host instead of renti…
Database migrations are one of those things that often look harmless during code review. A migration may contain only a few lines of SQL, the applic…
There is a concurrency problem in APIs that is easy to miss. Two clients read the same resource: Client A -> GET /documents/42 Client B -> GET…
I recently released a small open-source Symfony bundle called MaskedBundle . The reason for building it was quite simple: logs are useful, but somet…
A comment on my last article was better than the article. The subject was single-database multi-tenancy, and @to21as argued that the predicate shoul…
Single-database multi-tenancy is the cheapest kind: one schema, one connection, an organization_id column on every tenant-owned table. The whole des…
JSON has no representation for a file. Strings, numbers, arrays, objects - that is the whole list. So every JSON-RPC API eventually runs into the sa…
Upgrading a Symfony application to PHP 8.4 doesn't have to mean rewriting half the codebase. For applications that have been running in production f…
If you write PHP and work with Symfony every day, chances are you’ve already run PHPStan or Psalm, or at least heard of Rector. But let’s be honest:…
mailkite/symfony-mailer resolves a mailkite+api:// DSN into a first-party Symfony Mailer transport — which means Mautic, PrestaShop, Drupal, and any…
Shopify's app documentation has exactly one first-class path: Node, the official CLI, and a Remix template that wires authentication for you. Pick a…
Contract testing a Symfony API with OpenAPI takes four moving parts: the OpenAPI spec, a WebTestCase (or a plain Request / Response pair), one trait…
For years, Symfony teams solved UI scaling one of two ways. Either you adopted a JavaScript build pipeline — Webpack Encore, Vite, npm scripts — and…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
Book: Decoupled PHP — Clean and Hexagonal Architecture for Applications That Outlive the Framework Also by me: Thinking in Go (2-book series) — Comp…
When you build an API, the first line of defense isn't your firewall or your database — it's the request itself. Every payload that hits your contro…
Why JavaScript Calendar Libraries Fail Here The go-to solution for a calendar has been a JavaScript widget: FullCalendar, Pikaday, flatpickr, or one…
Originally posted on https://symfonycasts.com/blog/honest-entities Your Doctrine entities are lying to you! For years, the standard way to build Doc…
A prototype web page displaying pure placeholder content When building early UI prototypes or shaping design systems in Symfony, placeholder content…
Security is the cornerstone of any modern web application, but historically, implementing robust authentication and authorization mechanisms has bee…