Python으로 JSON API를 빌드하는 방법

문제를 제거하기 위해 도구를 사용해보십시오

Python으로 JSON API를 빌드하는 방법

JSON API 사양은 클라이언트와 서버 간의 통신을 가능하게 하는 강력한 방법입니다. JSON 형식을 사용하여 둘 간에 전송되는 요청 및 응답의 구조를 지정합니다.

NS JSON API 사양 클라이언트와 서버 간의 통신을 가능하게 하는 강력한 방법입니다. JSON 형식을 사용하여 둘 간에 전송되는 요청 및 응답의 구조를 지정합니다.

JSON은 데이터 형식으로서 가볍고 읽기 쉽다는 장점이 있습니다. 따라서 빠르고 생산적으로 작업하기가 매우 쉽습니다. 사양은 클라이언트와 서버 간에 전송해야 하는 요청 수와 데이터 양을 최소화하도록 설계되었습니다.



머신러닝으로 돈 벌기

여기에서 Python과 Flask를 사용하여 기본 JSON API를 만드는 방법을 배울 수 있습니다. 그런 다음 나머지 기사에서는 JSON API 사양이 제공해야 하는 일부 기능을 시험해 보는 방법을 보여줍니다.

Flask는 Python 라이브러리입니다. 웹 개발을 위한 '마이크로 프레임워크'를 제공합니다. 단순하지만 확장 가능한 핵심 기능이 함께 제공되므로 빠른 개발에 적합합니다.

Flask를 사용하여 JSON과 유사한 응답을 보내는 방법에 대한 정말 기본적인 예는 다음과 같습니다.

from flask import Flask app = Flask(__name__) @app.route('/') def example(): return '{'name':'Bob'}' if __name__ == '__main__': app.run()

이 문서에서는 Flask용 두 가지 추가 기능을 사용합니다.

  • 플라스크-REST-JSONAPI JSON API 사양을 밀접하게 따르는 API를 개발하는 데 도움이 될 것입니다.
  • Flask-SQLAlchemy 사용할 것입니다 SQLAlchemy 간단한 데이터베이스를 만들고 상호 작용하는 것을 매우 간단하게 만듭니다.

큰 그림

최종 목표는 기본 데이터베이스와 클라이언트 측 상호 작용을 허용하는 API를 만드는 것입니다. 데이터베이스와 클라이언트 사이에는 데이터 추상화 계층과 자원 관리자 계층이라는 두 개의 계층이 있습니다.

관련된 단계에 대한 개요는 다음과 같습니다.

  1. Flask-SQLAlchemy를 사용하여 데이터베이스 정의
  2. 다음을 사용하여 데이터 추상화 만들기 마시멜로-JSONAPI
  3. Flask-REST-JSONAPI로 리소스 관리자 만들기
  4. URL 끝점을 만들고 Flask로 서버 시작

이 예에서는 현대 예술가와 다른 예술 작품과의 관계를 설명하는 간단한 스키마를 사용합니다.

모든 것을 설치하십시오

시작하기 전에 프로젝트를 설정해야 합니다. 여기에는 작업 공간 및 가상 환경 생성, 필요한 모듈 설치, 프로젝트에 대한 기본 Python 및 데이터베이스 파일 생성이 포함됩니다.

명령줄에서 새 디렉터리를 만들고 내부로 이동합니다.

$ mkdir flask-jsonapi-demo $ cd flask-jsonapi-demo/

하는 것이 좋습니다. 가상 환경 생성 각 Python 프로젝트에 대해. 이 단계를 건너뛸 수 있지만 강력히 권장됩니다.

$ python -m venv .venv $ source .venv/bin/activate

가상 환경이 생성되고 활성화되면 이 프로젝트에 필요한 모듈을 설치할 수 있습니다.

$ pip install flask-rest-jsonapi flask-sqlalchemy

필요한 모든 것이 이 두 확장에 대한 요구 사항으로 설치됩니다. 여기에는 Flask 자체와 SQLAlchemy가 포함됩니다.

다음 단계는 프로젝트에 대한 Python 파일과 데이터베이스를 만드는 것입니다.

$ touch application.py artists.db

데이터베이스 스키마 생성

여기에서 수정을 시작합니다 |_+_| 프로젝트에 대한 데이터베이스 스키마를 정의하고 생성합니다.

열기 |_+_| 원하는 텍스트 편집기에서 일부 모듈을 가져와 시작합니다. 명확성을 위해 모듈은 이동하면서 가져옵니다.

다음으로 |_+_|라는 개체를 만듭니다. Flask 클래스의 인스턴스로.

그런 다음 SQLAlchemy를 사용하여 생성한 데이터베이스 파일에 연결합니다. 마지막 단계는 |__+_|라는 테이블을 정의하고 만드는 것입니다.

application.py

추상화 계층 만들기

다음 단계는 마시멜로-JSONAPI 방금 정의한 테이블에 대한 논리적 데이터 추상화를 생성하는 모듈입니다.

이 추상화 계층을 만드는 이유는 간단합니다. API를 통해 기본 데이터가 노출되는 방식을 더 잘 제어할 수 있습니다. 이 계층을 API 클라이언트가 기본 데이터를 명확하게 볼 수 있고 볼 필요가 있는 비트만 볼 수 있는 렌즈로 생각하십시오.

아래 코드에서 데이터 추상화 계층은 Marshmallow-JSONAPI의 |_+_| 수업. API를 통해 아티스트 테이블의 단일 레코드와 여러 레코드에 대한 액세스를 제공합니다.

이 블록 내에서 |_+_| 클래스는 일부 메타데이터를 정의합니다. 특히, 단일 레코드와 상호작용하기 위한 URL 끝점의 이름은 |_+_|가 되며, 여기서 각 아티스트는 URL 매개변수 |_+_|로 식별됩니다. 많은 레코드와 상호 작용하기 위한 끝점의 이름은 |_+_|입니다.

정의된 나머지 속성은 아티스트 테이블의 열과 관련됩니다. 여기에서 각각이 API를 통해 노출되는 방식을 추가로 제어할 수 있습니다.

예를 들어, 데이터베이스에 새 아티스트를 추가하기 위해 POST 요청을 할 때 |_+_| 필드는 |_+_|를 설정하여 필수입니다.

그리고 어떤 이유로든 |_+_| GET 요청 시 반환되는 필드는 |_+_|를 설정하여 지정할 수 있습니다.

application.py

리소스 관리자 및 URL 끝점 만들기

퍼즐의 마지막 조각은 각 경로 /artists 및 /artists/id에 대한 리소스 관리자와 해당 끝점을 만드는 것입니다.

각 리소스 관리자는 Flask-REST-JSONAPI 클래스에서 상속되는 클래스로 정의됩니다. |_+_| 그리고 |_+_|.

여기서 그들은 두 가지 속성을 취합니다. |_+_| 리소스 관리자가 사용하는 데이터 추상화 계층을 나타내는 데 사용되며 |_+_| 데이터 계층에 사용할 세션 및 데이터 모델을 나타냅니다.

다음으로 정의 |_+_| Flask-REST-JSONAPI의 인스턴스로 |_+_| 클래스를 만들고 |__+_|를 사용하여 API에 대한 경로를 만듭니다. 이 메서드는 데이터 추상화 계층 클래스, 끝점 이름 및 URL 경로의 세 가지 인수를 사용합니다.

마지막 단계는 스크립트가 직접 실행될 때 디버그 모드에서 앱을 실행하는 메인 루프를 작성하는 것입니다. 디버그 모드는 개발에 적합하지만 프로덕션 환경에서 실행하기에는 적합하지 않습니다.

app

GET 및 POST 요청 만들기

이제 API를 사용하여 시작할 수 있습니다. HTTP 요청을 하다 . 이것은 웹 브라우저, curl과 같은 명령줄 도구 또는 다른 프로그램(예: Requests 라이브러리를 사용하는 Python 스크립트)에서 가져올 수 있습니다.

서버를 시작하려면 |_+_| 스크립트:

artists

브라우저에서 http://localhost:5000/아티스트 . 지금까지 데이터베이스에 있는 모든 레코드의 JSON 출력을 볼 수 있습니다. 제외하고는 없습니다.

데이터베이스에 레코드 추가를 시작하기 위해 POST 요청을 할 수 있습니다. 이를 수행하는 한 가지 방법은 curl을 사용하여 명령줄에서 수행하는 것입니다. 또는 다음과 같은 도구를 사용할 수 있습니다. 불명 증 또는 양식을 사용하여 데이터를 게시하는 간단한 HTML 사용자 인터페이스를 코딩할 수 있습니다.

와 함께 곱슬 곱슬하다 , 명령줄에서:

from flask import Flask from flask_sqlalchemy import SQLAlchemy # Create a new Flask application app = Flask(__name__) # Set up SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////artists.db' db = SQLAlchemy(app) # Define a class for the Artist table class Artist(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) birth_year = db.Column(db.Integer) genre = db.Column(db.String) # Create the table db.create_all()

이제 다음으로 이동하면 http://localhost:5000/아티스트 , 방금 추가한 레코드가 표시됩니다. 더 많은 레코드를 추가하면 이 URL 경로가 |_+_| 끝점.

|_+_| 아티스트별로 한 명의 아티스트만 보려면 번호를 입력하면 해당 URL로 이동할 수 있습니다. 예를 들어 첫 번째 아티스트를 보려면 http://localhost:5000/artists/1 .

필터링 및 정렬

JSON API 사양의 깔끔한 기능 중 하나는 URL에 일부 매개변수를 정의하여 보다 유용한 방식으로 응답을 반환하는 기능입니다. 예를 들어 선택한 필드에 따라 결과를 정렬하거나 일부 기준에 따라 필터링할 수 있습니다.

Flask-REST-JSONAPI에는 이것이 내장되어 있습니다.

아티스트를 출생 연도순으로 정렬하려면 다음으로 이동하십시오. http://localhost:5000/artists?sort=birth_year . 웹 응용 프로그램에서 이렇게 하면 성능 측면에서 비용이 많이 들고 사용자 경험에 영향을 줄 수 있는 클라이언트 측에서 결과를 정렬할 필요가 없습니다.

필터링도 쉽습니다. 대괄호 안에 포함된 필터링하려는 기준을 URL에 추가합니다. 포함할 세 가지 정보가 있습니다.

  • name - 필터링 기준 필드(예: |_+_|)
  • op - 필터 연산(같음, 보다 큼, 보다 작음 등)
  • val - 필터링할 값(예: 1900)

예를 들어 아래 URL은 출생 연도가 1900년보다 큰 아티스트를 검색합니다.

http://localhost:5000/artists?filter=[{이름:생년월,작:gt,발:1900}]

이 기능을 사용하면 API를 호출할 때 관련 정보만 검색하기가 훨씬 쉬워집니다. 이는 특히 느린 연결을 통해 잠재적으로 많은 양의 데이터를 검색할 때 성능을 향상시키는 데 유용합니다.

트위터 개인 프로필 뷰어 / 잠금 해제기

쪽수 매기기

성능을 지원하는 JSON API 사양의 또 다른 기능은 페이지 매김입니다. 한 번에 모든 응답이 전송되는 것이 아니라 여러 페이지에 걸쳐 큰 응답이 전송되는 경우입니다. URL에서 요청하는 페이지의 크기와 페이지 수를 제어할 수 있습니다.

예를 들어, 한 번에 100개의 결과를 모두 로드하는 대신 10페이지에 걸쳐 100개의 결과를 수신할 수 있습니다. 첫 번째 페이지에는 결과 1-10이 포함되고 두 번째 페이지에는 결과 11-20이 포함되는 식입니다.

페이지당 수신할 결과 수를 지정하려면 ?page[size]=X 매개변수를 URL에 추가할 수 있습니다. 여기서 X는 결과 수입니다. Flask-REST-JSONAPI는 30을 기본 페이지 크기로 사용합니다.

지정된 페이지 번호를 요청하려면 ?page[number]=X 매개변수를 추가할 수 있습니다. 여기서 는 페이지 번호입니다. 아래와 같이 두 매개변수를 결합할 수 있습니다.

http://localhost:5000/artists?page[size]=2&page[number]=2

이 URL은 페이지 크기를 페이지당 두 개의 결과로 설정하고 두 번째 결과 페이지를 요청합니다. 그러면 전체 응답에서 세 번째와 네 번째 결과가 반환됩니다.

관계

거의 항상 한 테이블의 데이터는 다른 테이블에 저장된 데이터와 관련됩니다. 예를 들어 아티스트 테이블이 있는 경우 예술품 테이블도 필요할 수 있습니다. 각 작품은 그것을 만든 예술가와 관련이 있습니다.

JSON API 사양을 사용하면 관계형 데이터로 쉽게 작업할 수 있으며 Flask-REST-JSONAPI를 사용하면 이를 활용할 수 있습니다. 여기에서는 데이터베이스에 작품 테이블을 추가하고 아티스트와 작품 간의 관계를 포함하여 이를 시연합니다.

삽화 예제를 구현하려면 |_+_|의 코드를 약간 변경해야 합니다.

먼저 몇 가지 추가 가져오기를 수행한 다음 각 아트웍을 아티스트와 연결하는 새 테이블을 만듭니다.

Schema

다음으로 추상화 계층을 다시 작성합니다.

Meta

이것은 아트웍 테이블에 대한 추상화 레이어를 정의하고 아티스트와 아트웍 간의 관계를 |_+_| 수업.

다음으로, 한 번에 한 번에 하나씩 아트웍에 액세스하고 아티스트와 아트웍 간의 관계에 액세스하기 위한 새 리소스 관리자를 정의합니다.

artist_one

마지막으로 몇 가지 새 끝점을 추가합니다.

실행 |_+_| curl을 통해 명령줄에서 일부 데이터를 게시하려고 합니다.

artist_many

그러면 |_+_|가 있는 아티스트와 관련된 아트웍이 생성됩니다.

가위바위보 자바스크립트 html

브라우저에서 http://localhost:5000/artists/1/relationships/artworks . |__+_|가 있는 아티스트와 관련된 작품을 보여줘야 합니다. 이렇게 하면 매개변수가 있는 더 복잡한 URL을 작성하여 |_+_| 들. 주어진 아티스트와 그들의 작품 사이의 모든 관계를 빠르게 나열할 수 있습니다.

또 다른 기능은 |_+_| 호출에 대한 응답에 관련 결과를 포함하는 기능입니다. 끝점:

http://localhost:5000/artists/1?include=artworks

이렇게 하면 아티스트 엔드포인트에 대한 일반적인 응답과 해당 아티스트의 각 작품에 대한 결과도 반환됩니다.

희소 필드

언급할 가치가 있는 마지막 기능은 희소 필드입니다. 많은 복잡한 관계가 있는 대규모 데이터 리소스로 작업할 때 응답 크기가 정말 빠르게 증가할 수 있습니다. 관심 있는 필드만 검색하는 것이 좋습니다.

JSON API 사양을 사용하면 URL에 필드 매개변수를 추가하여 이를 수행할 수 있습니다. 예를 들어 아래 URL은 지정된 아티스트 및 관련 작품에 대한 응답을 가져옵니다. 그러나 지정된 아트웍에 대한 모든 필드를 반환하는 대신 제목만 반환합니다.

http://localhost:5000/artists/1?include=artworks&fields[artwork]=title

이것은 특히 느린 연결에서 성능을 향상시키는 데 매우 유용합니다. 일반적으로 필요한 최소한의 데이터로 서버와 주고받는 요청만 해야 합니다.

최종 발언

JSON API 사양은 깨끗하고 유연한 형식으로 서버와 클라이언트 간에 데이터를 전송하는 데 매우 유용한 프레임워크입니다. 이 기사에서는 Flask-REST-JSONAPI 라이브러리를 사용하여 Python에서 작업한 예제와 함께 이를 통해 수행할 수 있는 작업에 대한 개요를 제공했습니다.

다음에는 무엇을 하시겠습니까? 많은 가능성이 있습니다. 이 기사의 예제는 단 두 개의 테이블과 이들 간의 단일 관계가 있는 간단한 개념 증명입니다. 원하는 만큼 정교한 응용 프로그램을 개발하고 여기에 제공된 모든 도구를 사용하여 상호 작용하는 강력한 API를 만들 수 있습니다.

읽어주셔서 감사합니다. Python으로 계속 코딩하세요!

#python #프로그래밍 #json #api

또한보십시오: