Considering How APIs Are Influencing The Fundamentals of Software Engineering13 Sep 2016
I am preparing for my hangout with the #TC1019 Fundamentals of Software Engineering (3rd-semester course) out of the Tecnológico de Monterrey, Campus Guadalajara. In my own style, I didn't just want to prepare for the discussion, I wanted to publish it on my blog, providing an outline that students to walk away with, but hopefully is something that can also live on as part of my API research.
Where do I start? Well, it is a fundamental of software engineering course, so let's look at how the modern API movement can influence and impact the modern software engineer. I may be biased but I think APIs are significantly changing how we develop software, in some pretty important ways--let's explore.
History of Modern Web APIs
I always recommend anyone interested in learning more about APIs to pause for a moment and consider the history of modern web APIs, even if you think you know the API world already. In my opinion, many technologists take for granted some of the most common platforms out there, and haven't' taken the time to learn more about a specific API, and in many cases do not know that an API already exists for common platforms we use every day.
The more we understand the short history of web APIs, and why they are working, the more we can borrow from what is already working. Whether you are looking to provide API resources, consume APIs, or ideally do both--spend some time browsing through the history I've organized above.
Focus On HTTP & HTTP/2 In Modern Programming
The technology driving the web is low cost and ubiquitous, making it perfect for usage to deliver not just HTML to websites, but JSON that can be used in other systems, mobile applications, as well as device-based applications. There are some important standards being applied as part of the current API movement that impact software engineering fundamentals, here are a handful of the core elements.
You don't have to be a master of everything I've listed--I am far from being up to speed on everything here. However, I recommend spending as much time as you can, on a regular basis, absorbing the concepts at play when it comes to Internet technology and consider how existing API providers are putting them to work in their operations.
Next Step In The Evolution Of The Web
It is import to see modern APIs as just the next step in how data, content, and algorithmic resources are made available using Internet technology. One concept at play here, which is included above in the HTTP & HTTP/2 resource is what is called content negotiation--I recommend starting here, and I've included a simple tool to help bring it home.
API is not a specific vendor solution or even an open source code base--it is an approach to leverage existing web technology to achieve objectives around operating in a web and mobile, and now Internet of Things (IoT) landscape. APIs are not just about delivering JSON, it is about delivering the resources necessary to get the job done, negotiating exactly the format that is needed.
Wealth Of Resources Available Via Diverse Number of API Providers
I track on many companies doing interesting things with APIs, but I always start with learning about the companies who are selling services, and developing tools that API providers are putting to work. You can browse these API life cycle providers as part of my ongoing research:
These companies don't just sell services to API providers, if they are doing it right they also have APIs themselves. When every step along the life of an API, also has an API, the concept of the programmable web becomes more realistic.
Wealth of API Resources Available To Help Manage The API Life Cycle
After the API service providers, I keep an eye on companies who are delivering API resources in specific business verticals, which I call my stack APIs. These areas contain many of the common APIs that developers are using, but also some you hopefully may not know already about.
I am adding to this stack as fast as I possibly can. I'm constantly having to prioritize which APIs and add and remove from this list of API resources. Hopefully, as a software engineer you can find some interesting APIs amongst these stacks.
Making Digital Resources Available In Any Programming Language
One of the most common mistakes I see from aPI providers are references to, and dogma from their preferred programming language. Modern web APIs employ REST, employing the HTTP & HTTP/2 pipes, and leave the specifics of individual programming languages behind the API, and within client solutions. To help guide yoru learning I recommend taking a look at the API design best practices of API pioneers:
Successful API designers, architects, and operators transcend any single API programming languages, learning to craft an interface that speaks to as wide as possible audience, allowing the software you build to acomplish more.
Focus On API Definitions, Media Types, And Schemas Over Code
When focusing on APIs, I strongly recommend favoring API definitions, media types, and schemas over keeping to much code around. Things move fast in the workd of APIs, and the surface of an API will change, and there are many ways API architects are mitigating change, and remaining agile--I recommending speaking fluent:
If you speak in these formats, as an API architect you will be able to focus on delivering more standardized, and flexible API resource, helping you as a software engineer, be agile and potentially more distributed--truly embracing what makes the web work, and is the fuel for the growth in API usage when it comes to developing software.
That is where I recommend starting with the world of APIs when it comes to their impact on the fundamentals of software engineering. As a software engineer, HTTP is the core of what you should be studying and including in your toolbox. I've included a wealth of resources here, for use in our classroom discussion, but also hopefully something the students will be able to study as part of their ongoing API education.