{"API Evangelist"}

My Experiences Generating API Server or Client Code Using Swagger

When you start talking about generating server or client side code for APIs, using machine readable API definition formats like Swagger or API Blueprint, many technologists feel compelled to let you know, that at some point you will hit a wall. There is only so far you can go, when using your API definition as guide for generating server-side or clienit-side code, but in my experience you can definitely save some significant time an energy, by auto-generating code using Swagger definitions.

I just finished re-designing 15 APIs that support the core of API Evangelist, and to support the work I wrote four separate code generation tools:

  • PHP Server - Generating a Slim PHP framework for my API, based upon Swagger definition.
  • PHP Client - Assemble a custom PHP client of my design, using Swagger definition as guide.
  • JavaScript Client - Assemble a custom JavaScript client of my design, using Swagger definition as guide.
  • MySQL Database - Generate a MySQL script based upon the data models available in a Swagger definition.

Using Swagger, I can get myself 90-100% of the way for most of the common portions of the APIs I design. When writing a simple CRUD API like notes, or for links, I can auto-generate the PHP server, and a JS client, and underlying MySQL table structure, which in the end, runs perfectly with no changes.

Once I needed more custom functionality, and have more unique API calls to make, I then have to get my hands dirty, and begin manually working in the code. However auto-generation of code sure gets me a long way down the road, saving me time doing the really mundane, heavy lifting in creating the skeleton code structures I need to get up an running with any new API.

I’m also exploring using APIs.json, complete with Swagger references, and Docker image references to further bridge this gap. In my opinion, a Swagger definition for any API, can act as a fingerprint for which interfaces a docker image supports. I will write about this more in the future, as I produce better examples, but I'm finding that using APIs.json to bind a Swagger definition, with one or many Docker images, opens up a whole new view of how you can automate API deployment, management, and integration.

Finished Processing 973 API Related Patents From 2013

I’m slowly processing XML files of patents from the US Patent Office. You can read the origin of my journey here, but as of today, I finished processing 50 files of patent applications for 2013, adding 973 API related patents to the queue. I’m still making sense of the different types of patents, and whether they are specifically for APIs, more API adjacent, or just mention API as one component in the patent definition.

I figure I’ll go back to about 1990-1995, but not 100% sure at this point. So far I’ve identified 105 patent applications from 2015, 322 from 2014, and now 973 from 2013. I’m still reading the title and abstract of each patent application as they come in, building my understanding of what has been submitted, and the possible motivations behind each application.

Here are the current numbers that I have so far.

There are 6 patents so far that mention application programming interface or API directly in the title of the patent:

  • 12953023 - Providing customized visualization of application binary interface/application programming interface-related information - Red Hat, Inc.
  • 11559545 - 3D graphics API extension for a shared exponent image format - Nvidia Corporation
  • 12832025 - Application programming interface, system, and method for collaborative online applications - Apple Inc.
  • 12974934 - Method and apparatus for reverse patching of application programming interface calls in a sandbox environment - Adobe Systems Incorporated
  • 13178356 - Application programming interface for identifying, downloading and installing applicable software updates - Microsoft Corporation
  • 12716022 - Secure expandable advertisements using an API and cross-domain communications - eBay Inc.

There are 54 patents that mention application programming interface or API directly in the abstract of the patent:

  • 14477614 - System and method for connecting, configuring and testing wireless devices and applications - Jasper Technologies, Inc.
  • 13974635 - Information processing device, information processing method, and program - Sony Corporation
  • 13564610 - System and method for detecting errors in audio data - NVIDIA Corporation
  • 13744892 - Configuring and controlling wagering game compatibility - WMS Gaming, Inc.
  • 13858506 - Method and system for providing transparent access to hardware graphic layers - QNX Software Systems Limited
  • 11110293 - Directory features in a distributed telephony system - ShoreTel, Inc.
  • 12875132 - Lighting control system and method - Lumetric Lighting, Inc.
  • 13283872 - Unified transportation payment system - LG CNS Co., Ltd.
  • 13244694 - Apparatuses, methods and systems for a distributed object renderer - Zynga Inc.
  • 13743078 - System and method for processing telephony sessions - Twilio, Inc.
  • 13793712 - Cross-promotion API - Zynga Inc.
  • 13654798 - Declarative interface for developing test cases for graphics programs - Google
  • Inc.
  • 12267828 - Method and apparatus for monitoring runtime of persistence applications - SAP AG
  • 12559750 - Graphical display of management data obtained from an extensible management server - American Megatrends, Inc.
  • 13146368 - Configuring and controlling wagering game compatibility - WMS Gaming, Inc.
  • 12957479 - User authentication system and method for encryption and decryption - Empire IP LLC
  • 12570012 - Generic user interface command architecture - Microsoft Corporation
  • 13072462 - Adaptive termination - Triune Systems, LLC
  • 12605782 - Digital broadcasting system and method of processing data in digital broadcasting system - LG Electronics Inc.
  • 13244187 - Backup systems and methods for a virtual computing environment - Vizioncore, Inc.
  • 12970873 - Shared resource discovery, configuration, and consumption for networked solutions - SAP AG
  • 12425992 - Command portal for securely communicating and executing non-standard storage subsystem commands - Siliconsystems, Inc.
  • 12535139 - Methods for determining battery statistics using a system-wide daemon - Red Hat, Inc.
  • 12940986 - Integrated repository of structured and unstructured data - Apple Inc.
  • 13354233 - Browsing or searching user interfaces and other aspects - Apple Inc.
  • 12564288 - Detecting security vulnerabilities relating to cryptographically-sensitive information carriers when testing computer software - International Business Machines Corporation
  • 12885706 - Contact picker interface - Microsoft Corporation
  • 12357979 - Computer apparatus and method for non-intrusive inspection of program behavior - Trend Micro Incorporated
  • 12512121 - Method and system for managing graphics objects in a graphics display system - Microsoft Corporation
  • 11559545 - 3D graphics API extension for a shared exponent image format - Nvidia Corporation
  • 11828957 - Apparatus, system, and method for hiding advanced XML schema properties in EMF objects - International Business Machines Corporation
  • 12829714 - Storage manager for virtual machines with virtual storage - International Business Machines Corporation
  • 13073146 - Unified onscreen advertisement system for CE devices - Sony Corporation
  • 12209267 - Method and apparatus for measuring the end-to-end performance and capacity of complex network service - AT&T Intellectual Property I, LP
  • 12832025 - Application programming interface, system, and method for collaborative online applications - Apple Inc.
  • 11633851 - Method and apparatus for persistent object tool - SAP AG
  • 12889083 - Window server event taps - Apple Inc.
  • 12974934 - Method and apparatus for reverse patching of application programming interface calls in a sandbox environment - Adobe Systems Incorporated
  • 13248633 - Ecommerce marketplace integration techniques - Microsoft Corporation
  • 11899197 - Energy distribution and marketing backoffice system and method - Ambit Holdings, L.L.C.
  • 12941026 - Extended database search - Apple Inc.
  • 12209996 - Custom search index data security - Google Inc.
  • 13481814 - Apparatus and method for circuit design - Agnisys, Inc.
  • 12536363 - Seamless user navigation between high-definition movie and video game in digital medium - Warner Bros. Entertainment Inc.
  • 12271690 - Programming APIS for an extensible avatar system - Microsoft Corporation
  • 13178356 - Application programming interface for identifying, downloading and installing applicable software updates - Microsoft Corporation
  • 12716022 - Secure expandable advertisements using an API and cross-domain communications - eBay Inc.
  • 12838128 - Method and system for improving performance of a manufacturing execution system - Siemens Aktiengesellschaft
  • 12459005 - Method and system for providing internet services - Alibaba Group Holding Limited
  • 12858814 - Interaction management - 8x8, Inc.
  • 11684351 - Administrator level access to backend stores - Microsoft Corporation
  • 13048810 - Preventing malware from abusing application data - Symantec Corporation
  • 13271978 - Interfaces for high availability systems and log shipping - Microsoft Corporation
  • 12276157 - Unified storage for configuring multiple networking technologies - Microsoft Corporation

With the other other 1231 mentioning application programming interface or API in the description of the patent. It will take time to understand the scope of role APIs play when APIs are just a metnion in the description, where patents that directly mention in title, and abstract, carry a little more weight. (at least for now)

Another interesting layer so far, were the companies behind the last 2 years of API related patent activity. Here are the top 25 from the list so far.

  • Microsoft Corporation with 118 patents
  • International Business Machines Corporation with 75 patents
  • Google Inc. with 52 patents
  • Apple Inc. with 41 patents
  • Amazon Technologies, Inc. with 26 patents
  • QUALCOMM Incorporated with 23 patents
  • SAP AG with 19 patents
  • Research In Motion Limited with 18 patents
  • Citrix Systems, Inc. with 17 patents
  • Hewlett-Packard Development Company, L.P. with 17 patents
  • BlackBerry Limited with 16 patents
  • Adobe Systems Incorporated with 16 patents
  • Bally Gaming, Inc. with 16 patents
  • Oracle International Corporation with 15 patents
  • Zynga Inc. with 15 patents
  • Cisco Technology, Inc. with 13 patents
  • Symantec Corporation with 12 patents
  • Red Hat, Inc. with 12 patents
  • AT&T Intellectual Property I, L.P. with 11 patents
  • Fujitsu Limited with 10 patents
  • EMC Corporation with 10 patents
  • Intel Corporation with 9 patents
  • CommVault Systems, Inc. with 9 patents
  • Canon Kabushiki Kaisha with 9 patents
  • Enpulz, L.L.C. with 9 patents

I’m still learning, understanding, and making sense of these API related patents I’m mining. I will work to read, and separate out the hardware related APIs, but only slightly off to the side, as I still think hardware APIs are extremely relevant with the latest IoT evolution. During the process, I’m sure I’ll come up with other buckets to put APIs into, but ultimately looking to understand the role that APIs are playing in the patent game.

I suspect that downloading the last 20+ years of patents, processing them looking for the phrases “application programming interface”, or the acronym API, is just the beginning. As I read through the patents, learn about the ideas, people, and companies behind them, I’m sure my understanding will expand greatly. I’ll check in with more data after each import of files, and discovery of any new insights, and as always, you can find my patent API research repository on Github.

Doing The Research In Preparation For My Patent On A Patent API

David Berlind’s (@dberlind), Amid The API Copyright Controversy, An API Patent Claim Surfaces story from this last Friday, planted some ideas in my head around APIs and patents—something that once takes hold, becomes hopeless for me to resist, and 48 hours later, here are my initial thoughts.

Before I begin, let me state, patents and APIs, much like copryight and APIs, are not concepts I subscribe to, but because they are concepts that are being wielded in the API space, I am forced to enter the conversation.

I’ll let you read David’s piece on Pokitdok’s claim regarding their “patent-pending API” for yourself, something I find very troubling (about Pokitdok). My post is about my journey, after I read David's story, resulting in yet another research project into the politics of patents involving APIs. After reading David's story this Saturday AM (yeah I need a life), I started “googling” the concept of API patents, just to educate myself—my eternal mission at API Evangelist.

I was very surprised to find the number of results that come up when you search Google Patents for the term “application programming interface”—about 552,000 results (0.32 seconds), to be precise. What does this mean? I start reading, and 48 hours later I’m still reading. Sure there a number of older patents for hardware APIs, and even many APIs that were established during the web service heyday of the late 90’s and early 2000’s, but there is much more than that. I was surprised to see the number of patents with APIs as the main focus from API sector leaders like AWS, Twilio, Apigee, and Google.

I have to start with two of the most ironic API patents i have found so far, during my search:

  • Google (Through Unisys Patent Portfolio Acquisition) - Generation of Java language application programming interface for an object-oriented data store - An embodiment of the present invention is a technique to interface to a repository. A connection between a client and a repository database is established. The repository database has a repository application programming interface (API). The repository database contains objects related to a project management process. The repository API is communicated with to perform an operation based on parameters passed from the client via the connection. A return value associated with the operation is returned to the client.
  • CopyRightNow - CopyRightNow Application Programming Interface - Disclosed herein is a method and system for providing copyright protection for creative works from within a running content-creating software application by assembling and submitting a copyright application on the creative work to the United States Copyright Office through the use of a portable application programming interface, which may be utilized by third-party content-creating applications. Additionally disclosed is a method and system of registering a creative work in order to memorialize the creation of the creative work from within a running content creating application through the use of a portable application programming interface, which may be utilized by third-party content-creating applications. Additionally disclosed is a method and system for accessing and sharing copyright-protected creative works through a web accessible software application.

I spent most of the day Saturday looking through API patents, trying to separate the hardware from software, and the API adjacent to the specific API patents. I began my journey at Google Patent Search, and eventually find myself using Google Patent Search API (now deprecated), until I hit the wall, and I end up at the original data source, processing XML files. I’m only now getting to year 2013, after 24 hours or making sense of, writing a processing script, and downloading of patent XML files—so far I have 428 patents where “application programming interface” shows up in the title, abstract, description, or anywhere else in the content of a patent application.

You can view the entire patent listing here, and get the JSON file driving the listing here--as I process each year, going back to 1990, I will publish the resulting JSON.

My head is swimming. Once again I find myself neck deep in a concept I fundamentally disagree with, in hopes of understanding where the battle line exists within the API space, and educate myself enough so that I can articulate a line on this battlefield, in a war I refuse to participate in, yet I find myself sucked into.

From what I can see, API related patents are not something that that will happen in the future, it is already happening, and has been for quite some time. Sure there are many things that need separating when evaluating the 550K API related patents, but after 48 hours of research, I have to say that APIs are being patented at an increasing rate, and is something we just don't talk about publicly.

As I read through many of the titles, and abstracts, of the patent applications within each XML download I’ve been processing, I feel like I’m reading the antithesis of API Evangelist. On my blog I work every day to better understand how APIs are being used across each business sector, while looking to educate everyone about what is possible, sharing the best practices I discover along the way—when I read through the API patent abstracts, I see some very educated, and other not so educated bets on how APIs are being used, and where the future might be going, hoping to lock in these ideas, and extract value at some point in time.

Don’t get me wrong, I understand that patents are a necessary evil in the world of big business and in startup-land, but it doesn’t change my contempt for them. I’m sure many of my API heroes like AWS and Twilio are just submitting patents in a defensive stance, but yet again it doesn’t shift reduce my concern. To channel my worr around patents being applied in the world of APIs, I’m kicking off deeper research, and monitoring in this dark, un-discussed alley of the API economy.

To help me with my research I dowloaded all of 2014 patent submissions, pulled out all the API related ones, and published as a patent API. To keep up with the amount of patent absurdity that I have read over this beautiful weekend, I have to state my own intent to submit a patent on providing patent APIs. I will take my patent API design, and ensure if you intend to ever organize your patents, and make accessible via APIs you have to pay the piper—cause you know, this is how this shit gets done!!

Preparing For My Talk At API Days In Sydney With Lots of Docker, Swagger, and APIs.json Work

i’m spending a lot of time lately, playing around with different approaches to deploying APIs in Docker containers. Part of this is because it is the latest trend in API deployment and management, but also because I’m preparing for my talk at API Days in Sydney Australia next month.

I am always working to keep my keynotes in sync with not just my own work, but in alignment with where the wider conversation is going in the API space. I’m building off my talk at Defrag last November, which was titled, "containers will do for APIs what APIs have done for companies".

The title of my talk at API Days in Sydney is, "The Programmable World With APIs And Containers". While some of my talk will be inspirational, trying to understand where we are headed with APIs and containers, much of it will also be rooted in my own work to run my own business world using APIs and Docker, and using APIs.json and Swagger to help me orchestrate my resources.

I apologize for the gaps in my normal writing, and the heavy focus on Docker lately, but it is where my mind is at, from an operational standpoint, in preparation for the conversation in Australia, and from what I’m seeing, it is in sync with the wider API and cloud computing conversation.

As API Space Expands, So Do The Sources Of Knowledge: New YouTube and SoundCloud Channels

The API space is continuing its rapid expansion, and along with the number of API design, deployment, management, and integration providers, and the number of API conferences, there are some new sources of discussion around APIs--one as a YouTube Channel, and the other as a SoundCloud podcast.

  • API Workshop - We'll discuss topics around API Design, including: sustainability concepts: how to design APIs that last, new ideas in API design, voices and posts from the API blog world.
  • APIsUncensored - The official home of the APIs Uncensored podcast, a monthly series where Ole Lensmar and Lorinda Brandon blather about all things APIs with experts in the industry.

API Workshop is a production by J(a)son Harmon (@jharmn), and APIsUncensored is from the smart folks over at SmartBear(when describing them I always feel tricked into saying they are smart). I was honored to have mentions in both of them, and you can read my response to API Workshop here, and to APIsUncensored over here.

In my opnion, it is a healthy sign for the space to see more video and audio outlets emerge—the space needs as many open voices, educating the masses as it can possess. Maybe soon we'll need an aggregator of all the sources of great information! (get to work on that please)

I posted a video in response to my reference in the API Workshop episode, in addition to my blog post. Something I’m working on for APIsUncensored as well, continuing to expand my presence on these important channels. Personally I’m a big podcast listener, over YouTubing, but everyone has a different set of frequencies they tune into, and I think it is important to maximize the reach.

Now if only we could get the next episode of Traffic & Weather! Wink, Wink!