When I first started at Six Apart in 2008 my first project was the creation of the public-facing TypePad API. TypePad had previously had various APIs that followed third-party designs such as AtomPub and MetaWebLog, but the lack of an API tailored to TypePad's particular features was hurting the developer experience and limiting available functionality.

The TypePad API was developed following the best practices of the day, as a REST API with JSON as the serialization format and using OAuth 1.1 for authentication and authorization. The first iteration was built by myself and Simon Wistow.

Shortly after the initial framework was in place, Six Apart acquired the microblogging startup Pownce, and Leah Culver and Mike Malone joined with existing Six Aparters Mark Paschal and Brad Choate to build and ship TypePad Motion, demonstrating that the TypePad API could be used as a platform for building applications that did not directly pertain to the TypePad blogging experience.

A notable part of the TypePad API design is that its interface structure is fully described in a declarative manner, which allowed for a number of tools to be easily developed such as API reference documentation and an API Console (no longer available).

The Move to Say Media

When VideoEgg and Six Apart merged to form Say Media in 2010, there were many technology integration challenges ahead. Six Apart's stack was a mixture of Perl (TypePad) and Python (TypePad Motion and various other projects) while VideoEgg's stack was largely Java.

After some deliberation it was decided that we would build new applications in Python and that we would evolve what had previously been the TypePad API infrastructure into an internal REST API that would be the common foundation of all applications, allowing easy data sharing and connected workflows. The use of a REST API would allow us to more easily integrate the new data sources into legacy systems where necessary.

I led a small team of engineers in the task of "modernizing" the infrastructure for easier development in the new organization. This included creating a decentralized API architecture consisting of multiple services (where previously the TypePad API had been monolithic) and porting the service description and implementation framework to Python to make development more accessible to the wider team.

The Say Media development team successfully shipped several line-of-business applications, most internal, with the frontend developed with Django and the backend built inside the platform framework.

The reworked stack retains the TypePad API's characteristic of having a declarative description of the API, and that has proven to be an asset as we've evolved the API documentation and console system into a powerful internal data exploration tool called Platform Portal.

The Platform Portal application serves as both a documentation tool and a data browsing and manipulation tool, entirely driven by the service description metadata.

Say Platform Architecture

The platform architecture has stabilized around the concept of having a set of federated services, each providing the API endpoints for a set of object types. Internal callers can treat the entire set of services as a single API thanks to the API router, which maintains an index of which object types are handled by which service.

A relatively recent change to the architecture is the introduction of the public-facing "app services" interface, which makes a subset of the API visible to Internet clients. The primary use for this interface is the Say Media content sites, which are single-page applications built using AngularJS, rendering data retrieved from the content service.

The data from the platform services is also exported into a Hadoop based data warehouse as dimensions for offline analytical processing. This system uses Hive, with tables built from Avro schemas derived from the service description metadata, thus ensuring that the data model in Hive exactly matches the data model.

Unsurprisingly there are no interesting photos of us building a REST API, so instead here's a photo of some TypePad API / Motion team members moving a giant tomato. From left to right: myself, Mike Malone and Simon Wistow.

Photo by Leah Culver