使用 R 编程访问 REST API
REST(Representational state transfer) API 是一种架构风格,它包含构建 API 的特定约束,以确保它们一致、高效和可扩展。 REST API 是一组语法和约束,用于 Web 服务的开发和操作,包括通过端点发送和接收信息,即提供到外部环境的接口的 URL。
REST 于 2000 年由 Roy Fielding 首次提出。REST 中的信息抽象被称为资源。 REST 使用资源标识符来标识组件之间交互中的特定资源。它允许应用程序访问远离该应用程序的架构和安全域的另一台服务器上可用的资源或功能。
理论
REST 使用资源方法来执行所需的转换。只有满足以下条件的 API 才能被认为是 RESTful:
- 统一接口:服务器和客户端之间定义良好的接口。
- 无状态:通过请求本身而不是通过外部服务的支持来管理状态。
- 可缓存:响应应该是可缓存的,以提高可扩展性。
- 客户端-服务器:定义明确的客户端和服务器分离。
- 分层系统:客户端应该不知道客户端和服务器之间的中介。
- 按需代码:响应可以包括客户端可执行的逻辑
4种最重要的HTTP协议方法;
- GET:从远程服务器检索数据,可以是单个资源或资源列表。
- POST:在远程服务器上创建新资源。 *
- PUT:更新远程服务器上的数据。
- DELETE:从远程服务器删除数据。
REST API 可用于任何语言,因为请求基于通用 HTTP 协议。在 R 中,我们使用httr包和jsonlite 包进行 GET 请求,解析结果,最后翻页所有数据。这需要将 GET 请求中的原始数据转换为 JSON 格式,然后转换为解析后的数据帧。
在 R 中的实现
应用程序接口
电影《银河护卫队》的 API。 2于 2017 年 5 月 5 日上映,时长 136 分钟,由 James Gun 执导。它是动作、喜剧、冒险和科幻电影。 API 属于 OMDb,OMDb 是托管电影信息的开放式 Web 服务。
R
# Installing the packages
install.packages("httr")
install.packages("jsonlite")
# Loading packages
library(httr)
library(jsonlite)
# Initializing API Call
call <- "http://www.omdbapi.com/?i=tt3896198&apikey=948d3551&plot=full&r=json"
R
# Getting details in API
get_movie_details <- GET(url = call)
# Getting status of HTTP Call
status_code(get_movie_details)
# Content in the API
str(content(get_movie_details))
# Converting content to text
get_movie_text <- content(get_movie_details,
"text", encoding = "UTF-8")
get_movie_text
# Parsing data in JSON
get_movie_json <- fromJSON(get_movie_text,
flatten = TRUE)
get_movie_json
# Converting into dataframe
get_movie_dataframe <- as.data.frame(get_movie_json)
使用包访问电影 API
使用 R 中的 httr 包和 jsonlite 包访问电影 API。
电阻
# Getting details in API
get_movie_details <- GET(url = call)
# Getting status of HTTP Call
status_code(get_movie_details)
# Content in the API
str(content(get_movie_details))
# Converting content to text
get_movie_text <- content(get_movie_details,
"text", encoding = "UTF-8")
get_movie_text
# Parsing data in JSON
get_movie_json <- fromJSON(get_movie_text,
flatten = TRUE)
get_movie_json
# Converting into dataframe
get_movie_dataframe <- as.data.frame(get_movie_json)
输出:
- 状态代码:
状态码200表示API的数据请求、响应、接收成功。
- API 中的内容:
使用content()函数显示的请求的 API 数据。
- 获取电影文本:
API 中的数据转换为文本格式。
- get_movie_json:
API 中的数据被解析为 JSON 格式。
REST API 被广泛用于许多技术行业和子领域,如 Web 服务、人工智能等。