使用R编程访问REST API
REST(Representational state transfer)API是一种架构风格,包括构建API的特定约束,以确保它们是一致的、高效的和可扩展的。REST API是一个语法和约束的集合,用于开发和操作网络服务,包括通过他们的 端点 即提供外部环境接口的URL来发送和接收信息。
REST是由Roy Fielding在2000年首次提出的。REST中信息的抽象化被称为资源。REST使用一个资源标识符来识别组件之间互动的特定资源。它允许一个应用程序访问另一个服务器上的资源或功能,该服务器与该应用程序的架构和安全域相距遥远。
使用R编程访问REST API
REST使用资源方法来执行所需的转换。一个API只有在满足以下条件时才能被认为是RESTful。
- 统一接口: 服务器和客户端之间有一个定义明确的接口。
- 无状态: 通过请求本身管理状态,而不是通过外部服务的支持。
- 可缓存: 响应应该是可缓存的,以便提高可扩展性。
- 客户端-服务器: 客户和服务器有明确的分离。
- 分层系统: 客户端应该不知道客户端和服务器之间的中介机构。
- 按需编码: 响应可以包括客户端可执行的逻辑。
4种最重要的HTTP协议方法
- GET: 从远程服务器检索数据,可以是单一资源或资源列表。
- POST: 在远程服务器上创建一个新的资源。
- PUT : 更新远程服务器上的数据。
- DELETE: 从一个远程服务器上删除数据。
REST API可以被用于任何语言,因为请求是基于通用的HTTP协议的。在R中,我们使用 httr 包和 jsonlite包来 进行GET请求,解析结果,并最终翻阅所有数据。这需要将GET请求中的原始数据转换为JSON格式,然后再转换为经过解析的数据框架。
在R中的实现
API
电影《 银河护卫队2 》的API是在2017年5月5日发布的,时长136分钟,由James Gun导演。它是一部动作、喜剧、冒险和科幻电影。该API是OMDB的,OMDB是一个开放的网络服务,承载电影信息。
# 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"
使用包访问电影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数据。
- get_movie_text:
API中的数据被转换为文本格式。
- get_movie_json:
API中的数据被解析成JSON格式。
REST API在许多技术行业和子领域,如网络服务、人工智能中得到了充分的应用。