본문 바로가기
이미지 매크로

파이썬 RESTful API 만드는 방법. (with Flask)

by 업무자동화 2023. 3. 4.
반응형

무료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product1&wr_id=32 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #매크로프로그램 #메크로 #g매크로 #마우스매크로 #키보드매크로 #엑셀매크로 #키매크로 #수강신청매크로 #로지텍마우스매크로 #매크로키보드 #파이썬매크로 #매크로뜻 #매크로마우스 #로지텍매크로 #ld플레이어매크로 #오토마우스매크로 #키보드마우스매크로 #오토핫키매크로 #이미지매크로 #이미지인식매크로 #하드웨어매크로 #화면인식매크로 #선착순매크로 #이미지서치매크로 #한글매크로 #심플핫키 #simplehotkey #지존매크로

 

RESTful API를 구현하기 위해서는 Python의 Flask나 Django와 같은 웹 프레임워크를 사용하는 것이 일반적입니다. 저는 Flask를 기준으로 예시 코드를 제공해드리겠습니다.

from flask import Flask, jsonify, request

app = Flask(__name__)

# 예시를 위한 간단한 데이터셋
books = [
    {'id': 1, 'title': 'Harry Potter', 'author': 'J.K. Rowling'},
    {'id': 2, 'title': 'The Lord of the Rings', 'author': 'J.R.R. Tolkien'},
    {'id': 3, 'title': 'The Chronicles of Narnia', 'author': 'C.S. Lewis'}
]

# GET /books - 모든 책 리스트를 반환합니다.
@app.route('/books', methods=['GET'])
def get_books():
    return jsonify(books)

# GET /books/:id - 해당 ID의 책 정보를 반환합니다.
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = [book for book in books if book['id'] == book_id]
    if len(book) == 0:
        abort(404)
    return jsonify(book[0])

# POST /books - 새로운 책을 추가합니다.
@app.route('/books', methods=['POST'])
def create_book():
    if not request.json or not 'title' in request.json:
        abort(400)
    book = {
        'id': books[-1]['id'] + 1,
        'title': request.json['title'],
        'author': request.json.get('author', "")
    }
    books.append(book)
    return jsonify({'book': book}), 201

# PUT /books/:id - 해당 ID의 책 정보를 업데이트합니다.
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    book = [book for book in books if book['id'] == book_id]
    if len(book) == 0:
        abort(404)
    if not request.json:
        abort(400)
    book[0]['title'] = request.json.get('title', book[0]['title'])
    book[0]['author'] = request.json.get('author', book[0]['author'])
    return jsonify({'book': book[0]})

# DELETE /books/:id - 해당 ID의 책 정보를 삭제합니다.
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    book = [book for book in books if book['id'] == book_id]
    if len(book) == 0:
        abort(404)
    books.remove(book[0])
    return jsonify({'result': True})

if __name__ == '__main__':
    app.run(debug=True)

위 코드는 간단한 책 정보를 CRUD(Create, Read, Update, Delete)할 수 있는 RESTful API입니다. Flask의 Flask, jsonify, request를 import한 후, @app.route 데코레이터를 사용해 HTTP 메소드(GET, POST, PUT, DELETE)에 따른 기능을 정의하였습니다. 또한, 예시를 위해 books라는 간단한 데이터셋을 사용하였습니다. 이 코드를 실행하면 로컬 서버에서 동작하고, 웹브라우저에서 함수를 호출하면 결과를 Json 형태로 받아볼 수 있습니다. Visual Studio Code(VSCode)를 실행하고, 파이썬 코드를 붙여넣기 하세요.

 

 

실행( > python NGMsoftware.py)하면 하단 콘솔에 플라스크 서버가 실행됩니다. 서버가 http://127.0.0.1:5000에서 실행중입니다.

 

 

웹브라우저를 열고 localhost:5000/books로 이동 해보세요. 브라우저에서 책 목록을 Json 형태로 받아옵니다.

 

 

회사에서 React 프로젝트를 진행하고 있습니다. 로봇 또는 센서 데이타를 받아오거나 제어하기 위해 Modbus를 이용한 인터페이스를 개발하고 있는데요. 이번 세미콘(SEMICON)에서 시연해야 합니다. 실제 로봇을 제어해서 물건을 집어올리고 특정 위치에 내려놓아야 합니다. 그리고, 비상 정지시 로봇 상태와 센서 데이타를 받아서 어떤 이유로 에러가 발생했는지를 보여줘야 합니다. 그런데 문제는 React에서 Modbus 통신이 안된다는 겁니다. 좀 더 연구해보면 뭔가 방법이 있을듯하지만, 시간이 얼마 없군요.

 

 

파이썬에서 Modbus를 이용해서 산업용 로봇을 제어 해봤습니다. 이와 관련된 글을 아래 링크에서 확인할 수 있습니다.

[ 파이썬에서 Modbus 사용하기 ]

 

자~ 그렇다면 React에서 Modbus가 안되니 파이썬에서 Modbus를 구현한 후 React에서 파이썬 코드를 실행하면 됩니다. 그런데 또 문제가 발생하더라고요. 리엑트에서 파이썬 코드를 실행하려면 require("child_process")를 사용해서 스폰해야 하는데 undefined를 반환합니다. 이것도 하루 테스트 해보고 포기 했습니다. 어떤 이유인지는 모르겠지만, 윈도우 환경에서는 안되더라고요. 아마도 웹 특성상 윈도우를 제어하면 안되다보니 권한이나 보안 관련해서 문제가 있는듯 보입니다.

 

마지막으로 React에서 파이썬의 RESTful API를 호출해서 파이썬이 Modbus를 통해 로봇을 제어하도록 하는 방법을 테스트 해봤습니다. 간단하게 처리될줄 알았던 리엑트 로봇 제어가 먼길을 돌아 성공했네요. 리엑트 네이티브였다면 쉽게 되었을수도 있습니다. 아무튼, 촉박한 시간과 테스트로 인해 가장 빠르게 시연할 수 있는 제품을 만들어야 해서 구조가 복잡해졌습니다. 시제품을 만들 때는 코드를 튜닝해야겠습니다.

 

플라스크란?

플라스크(Flask)는 파이썬 웹 프레임워크 중 하나로, 마이크로 프레임워크라고도 불립니다. 마이크로 프레임워크란, 최소한의 도구만을 제공하여 개발자가 자유롭게 확장할 수 있도록 하는 웹 프레임워크를 말합니다.

플라스크는 Werkzeug 툴킷과 Jinja2 템플릿 엔진을 기반으로 만들어졌습니다. Werkzeug는 HTTP 요청 및 응답 처리, URL 라우팅 등을 제공하며, Jinja2는 HTML 템플릿을 렌더링합니다. 이러한 도구들을 사용하여 플라스크는 간단하고 가볍게 웹 어플리케이션을 만들 수 있습니다.

또한, 플라스크는 확장성이 좋아서, 필요에 따라서 데이터베이스 연결, 인증 처리, RESTful API 구현 등을 위한 확장 모듈을 사용할 수 있습니다. 특히, Flask-RESTful과 같은 확장 모듈을 사용하면 RESTful API를 쉽게 구현할 수 있습니다.

플라스크는 이러한 특징들로 인해 작은 규모의 웹 어플리케이션 또는 RESTful API 구현에 자주 사용됩니다.

 

Modbus란?

Modbus는 통신 프로토콜 중 하나로, 산업 자동화 및 제어 시스템에서 사용됩니다. 이 프로토콜은 먼저 모던 컴퓨터가 등장하기 전인 1979년에 Modicon에서 개발되었습니다. Modbus는 간단하고 경제적인 데이터 전송을 위해 설계되었으며, RS-485, RS-232, Ethernet, Modem 등 다양한 전송 매체를 지원합니다.

Modbus는 클라이언트-서버 모델을 사용합니다. 즉, 하나 이상의 클라이언트가 서버에 연결되어 데이터를 요청하고, 서버는 해당 데이터를 응답합니다. Modbus는 다양한 형식의 데이터 타입을 지원하며, 레지스터와 코일 등 다양한 데이터 유형을 다룰 수 있습니다.

Modbus는 매우 인기 있는 프로토콜이며, 산업 자동화 분야에서 가장 많이 사용되는 프로토콜 중 하나입니다. Modbus는 산업용 장비를 제어하는 데 매우 유용합니다.

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#비활성매크로 #g102매크로 #철권매크로 #레이저마우스매크로 #ghub매크로 #녹화매크로 #키보드반복매크로 #로지텍마우스광클매크로 #플라스크매크로 #윈도우매크로 #비활성g매크로 #오토매크로 #자동사냥 #주식매크로 #오토핫키키보드 #오토핫키마우스 #오토핫키이미지 #지존오토 #기계식매크로 #하드웨어매크로 #무한반복매크로 #대량이메일발송매크로 #엑셀VBA매크로 #주식모니터링매크로 #이미지맥스 #심플핫키 #오토클리커 #UiPath #Brity #스푸퍼 #DKOM #모바일게임매크로 #다클라매크로 #다계정매크로 #인스타그램매크로

반응형