As beginner software engineers, we always start with a good understanding of the basics. Like other beginners in any field, we sometimes get confused by technical terminologies. What is an API and what is an SDK?
Every programmer needs to understand how APIs and SDKs work together with their respective systems. APIs and SDKs are more technical aspects of computer programming that are often used in tandem – but have distinct differences, as well.
Exploring API vs SDK: What’re the differences
The terms API and SDK are often used interchangeably, especially when we want to download prebuilt software from a website. But, we shouldn’t confuse them with each other. Let’s compare API and SDK to make sure what each one does – and how you should relate to them in your software development environment.
Let’s say we’re developing a mobile app for a client or trying out some fun ideas to showcase, the idea is for this mobile app to allow a client to take a picture of a plant and the app will communicate with the visual recognition service which is running on the cloud. The idea is for the service to return the plant’s name and bring up short descriptions like what genre the plant belongs to, what the scientific name the plant has, etc.
Now the question arises how do we do this communication between the mobile app and the cloud-based service?
Hmmm… Well, that’s where APIs and SDKs come in.
Let’s start with APIs first.
API is a technology that allows two programs to communicate with each other.
So, first of all, APIs are all about communication. So there are a set of definitions and protocols that are always used for apps or services to talk to other apps or services how to give the example of the plant recognition system above. So basically we can think of them as a bridge between our app and other services. We want to talk to in our case the cloud-based recognition service.
We talk a lot about API. What it stands for anyways.
API – Application Programming Interface
Now we need to understand what are some of the aspects of APIs that makes them useful.
- Communication – So communicating between service to another service or an app to another app or an app to the backend server, etc.
- Abstraction – What this means is, inside the recognition service there would be lots of code probably thousands of lines of code running up but we as mobile app developers don’t want to have to worry about how the recognition service will figure out those plant information or which function call will give the correct results, other metadata, etc. This complicated logic will be abstracted away by the API. Which simplifies the process for the app developer.
- Standardized – This means that there are industry-defined standards for how to define an API. There’re a few formats that are popular for APIs like SOAP, REST, GraphQL, or RPC.
We will focus on REST for API which stands for
REST – Representational State Transfer
If we want to talk about REST then we have to establish some of the building blocks of APIs first to understand REST.
First, we have to be able to send a request to the server or a specific service in our case recognition service. So, for a REST API call request
we need to have some blocks.
- Operation – This could be HTTP methods like POST, GET, PUT, PATCH, etc. In our case, we’ll use POST as we want to send an image file to the recognition service.
- Parameters – Although this is Optional. In our case, the file name of the plant pictures is like
plant.jpg
as a multi-part form of data. - Endpoint – This part will be exposed by the recognition service where we need to send the file like
https://littlegiants.io/analize
- Headers – This is a special part of a REST API request which might have things like an API key or some authentication data.
The above four points act as a request in an API call.
So Now the question is what will be the response of the API call?
Typically it’s some form of raw data, maybe JSON(Which Stands for Javascript Object Notation) or maybe XML(Extended Markup language), etc. In JSON it might look like below
{ "type": "iris", "plant_name": "Iris Setosa" }
So, we understand the building blocks of what an API is, but the question arises, As a developer, how do we call an API from our code? In our case, As a mobile app developer, we don’t want to set up the request with all the above building blocks of operations, parameters, and endpoints and deal with raw JSON objects, right?
That’s where SDKs come in and shine.
What is SDK?
SDK - Software Development Kit
So, we can easily think of SDK as a toolbox of tools or code that calls the APIs for us. Awesome, right? So, we may be specialized in one programming language over the other. Hmm… there are SDKs in a variety of languages. So there’s maybe an SDK in Java, Python, Golang, etc. Whichever language is our specialty there’s probably an SDK for us to use which is exposed by the recognition service developers or some open source community.
Back to our example, What might an SDK look like in that example?
In the Mobile app, we’ll use the SDK tool which is provided by recognition service developers or some open source community. Since it’s a mobile app we’ll use the Flutter SDK. In the flutter SDK, rather than having to configure our request manually with all these building blocks of an API as we explains above, you might call just a method, that may be called, analizePlantImage
and that will call those various API building blocks like the Operations, Parameters, Endpoints and request the API from our code. In response, we’ll get a response but it won’t be necessarily a JSON object, but it might be some code or some model.
import 'package:reconize/plant.dart'; Plant plant = await plant.analizePlantImage("plant.jpg"); print(plant.toJson());
In the analizePlantImage
method we need to pass the pant file name binary file plant.jpg
, the SDK will set the required parameters for the API call and send the request to the recognition service and in response, we can go ahead and set a label in our mobile app from that response object via the SDK and we’re able to see plant name after analyzed.
So, hopefully, This kind of summarizes what an API and an SDK are. What’re they used for and how they truly fundamental tools in our serverless cloud app development?