[
Overview of REST APIs¶
Let us get an overview of REST APIs. REST based APIs are extensively used for building large scale applications.
- REST stands for Representational State Transfer.
- It is extensively used to build modern applications as it simplifies the process of building complex and large scale applications.
- Here are the use cases where REST APIs are extensively used.
- Mobile applications
- Web applications
- Data integration between multiple applications
- For mobile and web applications, we typically develop frontend and backend separately and integrate them over REST.
- Here are the commonly used REST based requests.
- GET – Get the data from the backend
- POST – Insert or update the data in the backend
- PUT – Update the data in the backend
- DELETE – Delete the data in the backend
- As part of data engineering projects, we typically use REST to get the data from external applications.
- If required, we can take care of authentication and authorization by leveraging Headers while placing the requests.
- Let us see an example using GitHub REST APIs. As a developer you might want to do the following:
- Get your repositories or public repositories. You can place GET request from external applications.
- Create a new repository under your GitHub Account. You can place POST request from external application.
- Delete an existing repository under your GitHub Account. You can place DELETE request form external application.
- Here are different ways you can validate REST APIs without getting into programming.
- Using browser (it might not work for complex requests)
- Using
curl
command. - Using a client based utility called as postman.
In [1]:
!curl https://api.github.com
{ "current_user_url": "https://api.github.com/user", "current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}", "authorizations_url": "https://api.github.com/authorizations", "code_search_url": "https://api.github.com/search/code?q={query}{&page,per_page,sort,order}", "commit_search_url": "https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}", "emails_url": "https://api.github.com/user/emails", "emojis_url": "https://api.github.com/emojis", "events_url": "https://api.github.com/events", "feeds_url": "https://api.github.com/feeds", "followers_url": "https://api.github.com/user/followers", "following_url": "https://api.github.com/user/following{/target}", "gists_url": "https://api.github.com/gists{/gist_id}", "hub_url": "https://api.github.com/hub", "issue_search_url": "https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}", "issues_url": "https://api.github.com/issues", "keys_url": "https://api.github.com/user/keys", "label_search_url": "https://api.github.com/search/labels?q={query}&repository_id={repository_id}{&page,per_page}", "notifications_url": "https://api.github.com/notifications", "organization_url": "https://api.github.com/orgs/{org}", "organization_repositories_url": "https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}", "organization_teams_url": "https://api.github.com/orgs/{org}/teams", "public_gists_url": "https://api.github.com/gists/public", "rate_limit_url": "https://api.github.com/rate_limit", "repository_url": "https://api.github.com/repos/{owner}/{repo}", "repository_search_url": "https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}", "current_user_repositories_url": "https://api.github.com/user/repos{?type,page,per_page,sort}", "starred_url": "https://api.github.com/user/starred{/owner}{/repo}", "starred_gists_url": "https://api.github.com/gists/starred", "topic_search_url": "https://api.github.com/search/topics?q={query}{&page,per_page}", "user_url": "https://api.github.com/users/{user}", "user_organizations_url": "https://api.github.com/user/orgs", "user_repositories_url": "https://api.github.com/users/{user}/repos{?type,page,per_page,sort}", "user_search_url": "https://api.github.com/search/users?q={query}{&page,per_page,sort,order}" }
]