基本电影数据库与外部API交互

时间:2019-05-30 12:06:16

标签: python django rest

在工作机会中,我经常看到“ REST-API”一词。因此,我想了解REST-API实际上是什么。我有一些Django的经验。好吧,我实际上是一个初学者。

我在GitHub上发现了一个简单的任务:https://github.com/netguru/python-recruitment-task我唯一不了解的是如何做到这一点:

POST /movies:
    Request body should contain only movie title, and its presence should be validated.
    Based on passed title, other movie details should be fetched from http://www.omdbapi.com/ (or other similar, public movie database) - and saved to application database.
    Request response should include full movie object, along with all data fetched from external API.

看起来如何?

如何验证“存在”?

如何从公共数据库下载数据?

2 个答案:

答案 0 :(得分:0)

您的问题很大。 首先,我建议您检查一些有关API REST like this one

的博客。

然后在编码之前,您可以直接使用Postman尝试一些请求,以了解发布和请求的工作方式。

这项工作完成后,请看一下django DRF (django rest framework),它会为您完成所有工作:)

答案 1 :(得分:0)

  

它看起来如何?

也许您将使用Django来完成此任务,但是您应该通过以下内容理解该概念,并且可能会适应:

import sys

import requests


API_KEY = '<API_KEY>'


def insert_to_db():
    raise NotImplementedError("Implement this function by yourself.")


if __name__ == "__main__":
    title = '+'.join([arg for arg in sys.argv[1:]])

    # Check if title is found in argument list. It's a validation.
    if not title:
        raise IndexError("No title entered!")

    # The request itself.
    response = requests.get(f"http://www.omdbapi.com/?t={title}&apikey={API_KEY}").json()
    if response:
        print(response)

这是一个简单的程序,它通过您使用的任何终端读取您的输入(电影标题),向您的API发出简单的请求(使用请求模块),并以JSON格式获取响应。这是它的输出:

$ python api.py city of god   
{'Title': 'City of God', 'Year': '2002', 'Rated': 'R', 'Released': '13 Feb 2004', 'Runtime': '130 min', 'Genre': 'Crime, Drama', 'Director': 'Fernando Meirelles, Kátia Lund(co-director)', 'Writer': 'Paulo Lins (novel), Bráulio Mantovani (screenplay)', 'Actors': 'Alexandre Rodrigues, Leandro Firmino, Phellipe Haagensen, Douglas Silva', 'Plot': "In the slums of Rio, two kids' paths diverge as one struggles to become a photographer and the other a kingpin.", 'Language': 'Portuguese', 'Country': 'Brazil, France, Germany', 'Awards': 'Nominated for 4 Oscars. Another 66 wins & 38 nominations.', 'Poster': 'https://m.media-amazon.com/images/M/MV5BMGU5OWEwZDItNmNkMC00NzZmLTk1YTctNzVhZTJjM2NlZTVmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_SX300.jpg', 'Ratings': [{'Source': 'Internet Movie Database', 'Value': '8.6/10'}, {'Source': 'Rotten Tomatoes', 'Value': '91%'}, {'Source': 'Metacritic', 'Value': '79/100'}], 'Metascore': '79', 'imdbRating': '8.6', 'imdbVotes': '639,695', 'imdbID': 'tt0317248', 'Type': 'movie', 'DVD': '08 Jun 2004', 'BoxOffice': 'N/A', 'Production': 'Miramax Films', 'Website': 'http://www.miramax.com/movie/city-of-god', 'Response': 'True'}
  

如何验证“状态”?

分析程序应该清除您的疑问。

    title = '+'.join([arg for arg in sys.argv[1:]])

    # Check if title is found in argument list. It's a validation.
    if not title:
        raise IndexError("No title entered!")

这部分代码检查标题是否传递给您的请求。这称为 validation ,当您使用API​​时,在与用户输入数据进行交互之前清理用户输入数据很重要,否则,它可能会使API发生意外行为。

  

如何从公共数据库下载数据?

这是一个普遍的问题,您可能需要进一步解释您要下载的内容。数据库各不相同,并且API通过代表您执行查询来与DB进行通信接口。您可能需要对此进行详细说明。

但是使用相关的API下载JSON文件确实非常简单。如果您使用的是Linux,并且对curl非常熟悉,只需向其发出请求,然后将其重定向到文件即可:

curl "http://www.omdbapi.com/?t=the+professional&apikey=<API_KEY>" >> out.json

在此示例中,您可能会涉及一个如何处理外部API的示例,然后由您自己决定。