Best Practices for better RESTful API Design

For this guide, I’m assuming you’re familiar with very basics concepts of HTTP, JSON or API and this guide won’t cover its fundamentals or other types of API’s like SOAP or RPC.

Designing RESTful API’s can be tricky because there are a tons of possibilities to build it. Also, REST is an architectural style and not a strict standard and so it puts flexibility and freedom of structure on designing. However, following the best practices you can raise your chances to get succeed.

A well-designed web API should aim to support a platform independence, it means your application clients should be able to consume the API without requiring how it’s physically implemented and service consistency, where your service should be able to evolute regardless your client applications.

The topics listed below covers the developments standards that I’m used to follow to design and implement successful API solutions.

Continue lendo

Object oriented principles for a good software design

If you are a developer, you must have at least a basic idea about Object Oriented Programming. But, if you are a willing to become an OOP programmer, it’s a requirement to you putting enough efforts on learning the concepts of Object Oriented Design Principles to create clean and modular designs. And it’s curious how things raised more than decades ago can be still updated.

Patterns of Enterprise Application Architecture” – Martin Fowler.

Principles Of Object Oriented Design“, compiled by Uncle Bob.

Principles about class design (SOLID):

SRP The Single Responsibility Principle A class should have one, and only one, reason to change.
OCP The Open Closed Principle You should be able to extend a classes behavior, without modifying it.
LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes.
ISP The Interface Segregation Principle Make fine grained interfaces that are client specific.
DIP The Dependency Inversion Principle Depend on abstractions, not on concretions.

Principles about package cohesion:

REP The Release Reuse Equivalency Principle The granule of reuse is the granule of release.
CCP The Common Closure Principle Classes that change together are packaged together.
CRP The Common Reuse Principle Classes that are used together are packaged together

Principles about the couplings between packages:

ADP The Acyclic Dependencies Principle The dependency graph of packages must have no cycles.
SDP The Stable Dependencies Principle Depend in the direction of stability.
SAP The Stable Abstractions Principle Abstractness increases with stability

Besides that, there are a bulck of others object oriented design principles that are equally important:

  1. DRY (Don’t repeat yourself) — avoids duplication in code.
  2. Encapsulate what changes — hides implementation detail, helps in maintenance.
  3. Favor Composition over Inheritance — code reuse without cost of inflexibility.
  4. Programming for Interface — helps in maintenance, improves flexibility.
  5. Delegation principle — don’t do all things by yourself, delegate it.

Configurando um CDN com o serviço Amazon CloudFront

Para quem ainda não conhece, a Amazon AWS é um serviço da Amazon que oferece uma lista enorme de produtos na Nuvem disponíveis no mundo todo, como servidores virtuais, armazenamento de objetos, banco de dados, DNS, IoT, Machine Learning, entre outros.

O texto de hoje vai mostrar como você pode configurar o serviço Amazon CloudFront para disponibilizar um CDN (content delivery network).

Continue lendo

A metodologia Twelve-Factor para construção de SaaS

Nao é de hoje que o mercado de software vem sofrendo uma revolução com o boom das soluções PaaS (plataforma como serviço) como Amazon AWS, Microsoft Azure, Openshift ou Heroku. Com as empresas utilizando cada vez mais soluções na nuvem, seja devido à redução dos custos de infraestrutura ou o aumento da disponibilidade, se tornou crítico rever a modelagem das aplicações buscando aumentar escalabilidade, tolerância a falhas e facilitar o gerenciamento e a manutenção.

Com a experiência adquirida com os milhares de clientes de sua plataforma na nuvem, o Heroku formulou um manifesto para a arquitetura de aplicações Saas (software como serviço) chamada metodologia Twelve-Factor App.

Continue lendo

Dicas sobre como escrever bons READMEs

Eu acredito que muita gente já se perguntou sobre quais seriam as boas práticas para se construir um bom README para seus projetos, e existem diversos posts na internet descrevendo como fazer isso de uma forma concisa e organizada.

Eu recomendo a leitura do texto “Art of README“, o qual coloca de uma forma bastante interessante, dicas sobre como escrever um bom README. Inclusive você pode colaborar com a tradução desse texto para o nosso português.

E então, os seus READMEs estão de acordo com essa lista:

Continue lendo

Processamento de Imagens na Nuvem com Amazon AWS

Proposta de arquitetura para API de processamento de imagens na Nuvem, que pode ser integrada aos seus projetos ou disponibilizada com um SaaS.

Foram utilizados diversos produtos da Amazon Web Services, como Amazon S3 para o armazenamento das imagens antes e depois do tratamento, Amazon SimpleDB para gravar qualquer tipo de dado relativo à imagem, Amazon SQS para agendar e enfileirar os processamentos, e Amazon Elastic Beanstalk para implantar toda essa estrutura de forma escalável em qualquer plataforma suportada.

cloud-image-proccessor

Continue lendo

Autenticação baseada em token versus cookie

Arquitetura para autenticação de aplicativos e APIs

Atualmente um dos grandes desafios ao projetar uma arquitetura para web vem da diversidade de dispositivos e plataformas que estão presentes no nosso dia-a-dia. Para aqueles que trabalham com desenvolvimento web, projetos mobile ou mesmo desenvolvendo integração com alguma API dos grandes players do mercado, os desafios de se implementar uma autenticação não é nenhuma novidade.

Basicamente, existem dois métodos para implementar autenticação em aplicações ou APIs: com CookieToken.

Autenticação baseada em Cookie

É a estratégia mais utilizada, haja vista que é a forma mais tradicional. Utiliza cookies para autenticar o usuário a cada request. É por isso que uma autenticação baseada em cookie é normalmente conhecida como stateful. Ou seja, o estado da requisição anterior é mantido em sessão e pode ser recuperado.

Autenticação baseada em Token

É uma estratégia mais nova, porém amplamente utilizada, uma vez que permite autenticar usuários de diversos dispositivos com a mesma tecnologia. Um token assinado é enviado para o servidor a cada request. É por isso que uma autenticação baseada em token é normalmente conhecida como stateless. Ou seja, toda transação é realizada como se estivesse sendo feita pela primeira vez.

Diagrama explicando o funcionamento dos dois métodos:

Continue lendo