Posts

Showing posts with the label software

Design Patterns

Image
Introduction Gang of Four (GoF) is a term referring to a group of 4 authors ( Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides ) who published the classic book Design Patterns: Elements of Reusable Object-Oriented Software in 1994 . The book summarizes 23 design patterns commonly used to solve recurring object-oriented programming ( OOP ) design problems. The main benefit of GoF Design Patterns is providing standardized solutions to common problems, making source code easier to maintain, extend and creating a common language for developers when discussing software architecture. These 23 design patterns are divided into 3 main groups: Creational Patterns Factory Method : Defines an interface for creating an object, but lets subclasses decide which class to instantiate. Abstract Factory : Provides an interface for creating families of related or dependent objects without specifying their concrete classes. Builder : Separates the construction of a complex obj...

RESTful API Design

Image
Introduction REST (Representational State Transfer) working with JSON over HTTP/1.1 or HTTP/2 remains the default choice for public APIs and B2B integrations due to its popularity, debuggability and broad ecosystem. API Design & Resource Modeling When adopting REST , the design must maintain consistency, including the following characteristics: Resource-oriented Use plural nouns ( /api/v1/orders, /api/v1/users ). Placing actions in the URL, such as /orders/{id}/cancel , is a bad practice. Instead, use POST /orders/{id}/cancellations or PATCH /orders/{id} with a payload that updates state. Idempotency Ensure GET, PUT, DELETE are always idempotent. For POST (creating resources or processing payments), enforcing an Idempotency-Key in the Header is mandatory to prevent duplicate transactions during network glitches and client retries. Versioning Implement versioning from day one. Prefer URL Versioning (/api/v1/...) because it is explicit, easy to route at the Gateway layer (Nginx...