ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tutorial 0.4 API
    Tutorial/0.Tutorial 2022. 9. 5. 13:44

    개발 입문단계에 있어, 다른 이에게 보여줄 어떤 참고서를 작성하는 일은 나에게 마땅치 않은 것 같다.

    기왕의 공부내용은 다른 체계(https://1drv.ms/u/s!Ah3ot1Iz99uHgQuYOr3XDyRMXjIZ)로 정리되어 있다.

    이 블로그는 일종의 "루만의 메모상자"처럼 사용하려 한다.

     


    0.1 Flask 프레임 워크(https://flask-docs-kr.readthedocs.io/ko/latest/quickstart.html)

     

    from flask import Flask, render_template, request, jsonify
    app = Flask(__name__)
    
    @app.route('/')
    def home():
       return render_template('index.html')
    
    @app.route("/mars", methods=["POST"])
    def web_mars_post():
        sample_receive = request.form['sample_give']
        print(sample_receive)
        return jsonify({'msg': 'POST 연결 완료!'})
    
    @app.route("/mars", methods=["GET"])
    def web_mars_get():
        return jsonify({'msg': 'GET 연결 완료!'})
    
    if __name__ == '__main__':
       app.run('0.0.0.0', port=5000, debug=True)

     

    1) Flask class 임포트. 이 클래스의 인스턴스가 WSGI 어플리케이션.

    -첫번째 인자는 이 어플리케이션의 이름. 단일 모듈을 사용한다면, " __name__ "을 써야한다.

    ->어플리케이션으로 시작되는지, 모듈로 임포트되는지에 따라 이름이 달라지기 때문.

     

    2)인스턴스 생성. 인자로 모듈이나 패키지의 이름. render_template, request, jsonify

    -template 이나 정적파일을 찾을 때 필요.

    -jsonify : 전달한 데이터를 JSON으로 직렬화

     

    3)route() 데코레이터. URL과 프로토콜 방식을 알려준다.

     

    4)작성된 함수의 이름은 그 함수에 대한 URL을 생성. (url_for 함수)

    -함수는 클라이언트에 보여줄 메시지를 리턴.

     

    5)최종적으로 run() 함수를 사용해 로컬서버 실행.

    -소스파일을 모듈이 아닌 python 인터프리터를 이용해서 직접 실행한다면 if __name__ == '__main__': 이 문장은 우리가 실행한 서버가 현재 동작되는 유일한 서버라는 것을 보장한다.

     

     


    0.2 Query Parameter 와 Path Variable

    출처: https://ssungkang.tistory.com/entry/Web-Path-Variable-VS-Query-Parameter

    출처: https://ryan-han.com/post/translated/pathvariable_queryparam/

     

    [번역] Path Variable과 Query Parameter는 언제 사용해야 할까? | Integerous DevLog

    [번역] Path Variable과 Query Parameter는 언제 사용해야 할까? 2019/04/23 원작자의 허락을 받고 번역한 글입니다. 원문: When Should You Use Path Variable and Query Parameter? *역자 주: Spring boot와 Vue.js로 파일럿 프로

    ryan-han.com

     

    1) Query Parameter

    사용자 목록을 관리해야 하고, 모든 사용자는 사용자 페이지가 있어야 할 때.

    그리고 각각의 사용자를 위한 페이지를 만들려면 페이지 마다 식별된 파라미터 경로가 필요한데,
    다음과 같은 get 파라미터를 사용할 수 있을 것이다.

    /users?id=123  # 아이디가 123인 사용자를 가져온다.

    그럼 서버로 부터 id 변수를 얻을 수 있다. 이것이 Query String이 동작하는 방식이다.

     

    Query Parameter 은 경로 뒤에 입력 데이터를 함께 제공.

    /post?post_id=6
    

    이 때 ? 이후의 부분을 Query String이라고 하며 뒤는 key, value의 쌍으로 이루어진다.

    다음과 같이 &로 연결하여 여러 개의 데이터를 넘길 수도 있습니다.

    /post?post_id=6&key1=value1

     

    2)Path Variable

    하지만 데이터를 넘기는 방법 중의 하나로 Path Variable도 사용할 수 있다.
    Path Variable은 다음과 같이 사용한다.

    /users/123  # 아이디가 123인 사용자를 가져온다.

    이 경우에, 123 을 서버단에 전달한다. 경로를 변수로서 사용하는 것이다.

     

     

    Path Variable 는 이름에서도 알 수 있듯이 경로를 변수로서 사용.

    게시물이 존재하며 각각의 게시물을 볼 수 있는 경우, 각각의 게시물을 보기 위해서는 게시물의 id를 서버에 넘겨줘야 한다.

    이를 Path Variable 를 사용하면 다음과 같다.

    /post/6

     

     

    3)그럼 Path Variable과 Query Parameter를 각각 언제 사용해야 하는가?

    만약 어떤 resource를 식별하고 싶으면 Path Variable을 사용하고,
    정렬이나 필터링을 한다면 Query Parameter를 사용하는 것이 Best Practice이다.

    /users  # 사용자 목록을 가져온다.
    /users?occupation=programer  # 프로그래머인 사용자 목록을 가져온다.
    /users/123  # 아이디가 123인 사용자를 가져온다.

     

    또한, 기본적인 CRUD 기능을 위해서 또 다른 URL이나 query parameter를 정의할 필요는 없다.
    대신 원하는 기능에 맞게 HTTP 메소드를 바꾸어야 한다.

    /users [GET] # 사용자 목록을 가져온다.
    /users [POST] # 새로운 사용자를 생성한다.
    /users/123 [PUT] # 사용자를 갱신한다.
    /users/123 [DELETE] # 사용자를 삭제한다.

    거의 모든 CRUD 프로세스를 추가적인 endpoint(예를 들어 users/create) 또는 

    query parameter(예를 들어 users?action=create) 없이 수행할 수 있다.

    게다가 단순하고 예측 가능하다.

     

     

    3.1) resource를 식별해야하는 상황.

    서버에서는 어느 방식으로 넘어오던지 간에 받아온 resource의 id로 쿼리를 날린다.

    그런데 만약 존재하지 않은 resource의 id가 들어올 경우 각각 어떻게 동작할까?

    -Path Variable 은 저 경로의 존재하는 페이지가 없으므로 404 에러.

    -Query Parameter는 서버로 데이터가 넘어가고 쿼리를 날리며 해당하는 데이터가 없을 경우 따로 에러 핸들링을 해줘야.

     resource를 식별해야하는 상황에서는 Path Variable 가 더 적합하다.

     

     

    3.2) 정렬이나 필터링을 해야할 상황.

    post에 대해 django 관련 글만 필터링하는 아래와 같은 예시가 있습니다.

    post/django
    post?category=django
    

    django 관련 글이 없을 경우, Path Variable 는 404에러를 발생하고 Query Parameter 는 빈 리스트를 반환.

    펄터링을 하다가 404에러가 발생하는 것은 부적절하므로 정렬이나 필터링을 해야하는 상황에서는 Query Parameter 가 더 적합합니다.

     


    1.0 데코레이터

     

    1.1 url_for 함수

     

     


    2.0 삽질의 기억

     

    *templates 폴더 안에 index.html을 넣지 않았을 때. 즉, 경로를 잘못 넣었을 때.

    'Tutorial > 0.Tutorial' 카테고리의 다른 글

    URI 와 URL  (0) 2022.10.05
    REST API : 그러니까 창문은 창문답게 투명하게, 보기 쉽게 만들라는 것  (1) 2022.10.01
    Tutorial 0.3 Python  (0) 2022.08.21
    Tutorial 0.0 용어 정리  (0) 2022.08.18
    Tutorial 1.1 SQL  (0) 2022.08.15
Designed by Tistory.