{"id":610,"date":"2018-12-18T21:27:43","date_gmt":"2018-12-18T12:27:43","guid":{"rendered":"https:\/\/dong1lkim.oboki.net\/?p=610"},"modified":"2020-06-24T01:11:00","modified_gmt":"2020-06-23T16:11:00","slug":"flask-%ec%b4%88%ea%b0%84%eb%8b%a8-web-api-%ed%95%a8%ec%88%98","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/python\/flask-%ec%b4%88%ea%b0%84%eb%8b%a8-web-api-%ed%95%a8%ec%88%98\/","title":{"rendered":"[Python] Flask &#8211; \ucd08\uac04\ub2e8 WEB API\/\ud568\uc218"},"content":{"rendered":"<h1>python flask &#8211; \ucd08\uac04\ub2e8 WEB API\/\ud568\uc218<\/h1>\n<blockquote><p>\n  flask\ub97c \uc774\uc6a9\ud558\uba74 \ub2e8 \uba87 \uc904 \ub9cc\uc73c\ub85c \uc6f9 \uc11c\ube44\uc2a4\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4.\n<\/p><\/blockquote>\n<h2>\uc124\uce58<\/h2>\n<p><code>pip install flask<\/code><\/p>\n<h2>Hello World<\/h2>\n<p>\uc544\ub798\uc640 \uac19\uc774 <code>app<\/code>\uc774\ub77c\ub294 flask \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uace0, decorator\ub97c \uc774\uc6a9\ud574\uc11c <code>\/<\/code> \uacbd\ub85c\uc5d0 <code>GET<\/code> \uc694\uccad\uc774 \uc788\uc744 \ub54c &#8216;Hello Word!&#8217; \ub77c\ub294 \uba54\uc2dc\uc9c0\ub97c \ubfcc\ub824\uc8fc\ub294 \uc6f9\uc11c\ubc84\ub97c \uac04\ub2e8\ud558\uac8c \uc0dd\uc131\ud574\uc904 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"py\"># hello_world.py\nimport flask\n\napp = flask.Flask(__name__)\napp.config[\"DEBUG\"] = True\n\n@app.route('\/', methods=['GET',])\ndef index():\n  return \"Hello World!\"\n\nif __name__ == '__main__':\n  app.run(host='0.0.0.0',port='8888')\n<\/code><\/pre>\n<p><code>python hello_world.py<\/code> \uba85\ub839\uc73c\ub85c \uc2e4\ud589\ud55c \ub4a4 <code>curl -XGET $HOSTNAME:8888<\/code> \uc694\uccad\uc744 \ubcf4\ub0b4\uba74<\/p>\n<pre><code class=\"txt\">Hello World!\n<\/code><\/pre>\n<p>\uc704\uc640 \uac19\uc774 \uc751\ub2f5\uc744 \ubc1b\uc744 \uc218 \uc788\ub2e4. \uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0 \ud574\ub2f9 \uacbd\ub85c\ub85c \uc811\uadfc\ud574\ub3c4 \ub9c8\ucc2c\uac00\uc9c0.<\/p>\n<h2>Request Parameters<\/h2>\n<p><code>flask.request<\/code>\ub97c \uc774\uc6a9\ud558\uba74 URI\uc5d0 parameter\ub97c \ucd94\uac00\ud558\uc5ec, \uc694\uccad \uac12\uc5d0 \ub530\ub77c \ub2e4\ub978 \uc751\ub2f5\uc744 \ubc1b\ub3c4\ub85d \uc124\uacc4\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc55e\uc11c \ud06c\ub864\ub9c1\ud55c lotto \ub370\uc774\ud130(<a href=\"https:\/\/oboki.net\/programming\/python\/python-crawler-lotto\/\">[Python] requests\ub97c \uc774\uc6a9\ud55c crawler \u2013 \ub85c\ub610 \ud68c\ucc28\ubcc4 \ub2f9\ucca8 \uacb0\uacfc<\/a>)\ub97c \ud65c\uc6a9\ud55c\ub2e4. \uc544\ub798\uc640 \uac19\uc774 lotto \ub77c\ub294 \ubcc0\uc218\uc5d0 \ud574\ub2f9 \ub370\uc774\ud130\ub97c \ub85c\ub4dc\ud55c\ub2e4.<\/p>\n<pre><code class=\"py\">import pickle\n\nwith open('lotto.bin','rb') as f:\n  lotto = pickle.load(f)\n  f.close()\n<\/code><\/pre>\n<p>\uc6f9 \uc11c\ubc84\uc758 document root \ubc14\ub85c \ud558\uc704\uc758 \/win_result \uc5d0 \uc811\uadfc\ud588\uc744 \ub54c\uc5d0 \uc218\ud589\ud560 \uc791\uc5c5\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud55c\ub2e4. \uc608\ub97c \ub4e4\uc5b4 <code><a href=\"http:\/\/192.168.179.86:8888\/win_result?round=47\">http:\/\/192.168.179.86:8888\/win_result?round=47<\/a><\/code> \uc774\ub77c\ub294 \uc694\uccad\uc744 \ud55c \uacbd\uc6b0, <code><a href=\"http:\/\/192.168.179.86:8888\">http:\/\/192.168.179.86:8888<\/a><\/code> \uc774 root \uacbd\ub85c\uc774\uace0, <code>\/win_result<\/code>\ub294 \ud558\uc704 \uacbd\ub85c\uc774\uba74\uc11c \ud558\ub098\uc758 API \ub610\ub294 Application\uc774 \ub41c\ub2e4. \uadf8\ub9ac\uace0 \ud574\ub2f9 API\uc5d0 input argument\ub85c\uc11c <code>?round=47<\/code> \uc774\ub77c\ub294 \uac12\uc744 \uc804\ub2ec\ud558\uac8c \ub41c\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 ?round=x \ub77c\ub294 \uac12\uc744 \uc785\ub825\ubc1b\uc558\uc744 \ub54c\uc5d0 lotto \ub370\uc774\ud130(list \uc790\ub8cc\ud615)\uc758 x \ubc88\uc9f8 \uac12\uc744 json \ud615\ud0dc\ub85c \ubc18\ud658\ud574\uc8fc\ub294 \ud568\uc218\uc774\ub2e4.<\/p>\n<pre><code class=\"py\">from flask import request\nimport json\n\n@app.route('\/win_result', methods=['GET',])\ndef win_result():\n  rnd = int(request.args['round'])\n  return json.dumps(lotto[rnd],indent=2)\n<\/code><\/pre>\n<p>\ud55c\ubc88\uc5d0 \ub2e4 \uc368\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre><code class=\"py\"># win_result.py\nimport flask\nfrom flask import request\nimport pickle\nimport json\n\nwith open('lotto.bin','rb') as f:\n    lotto = pickle.load(f)\n    f.close()\n\napp = flask.Flask(__name__)\napp.config[\"DEBUG\"] = True\n\n@app.route('\/win_result', methods=['GET',])\ndef win_result():\n    rnd = int(request.args['round'])\n    return json.dumps(lotto[rnd],indent=2)\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0',port='8888')\n<\/code><\/pre>\n<p><code>python win_result.py<\/code> \uba85\ub839\uc73c\ub85c \uc2e4\ud589\ud558\uace0 <code>curl -XGET $HOSTNAME:8888\/win_result?round=47<\/code> \uc694\uccad\uc744 \ubcf4\ub0b4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc751\ub2f5\uc744 \ubc1b\uc744 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"json\">{\n  \"round\": 47,\n  \"win result\": {\n    \"numbers\": [\n      14,\n      17,\n      26,\n      31,\n      36,\n      45\n    ],\n    \"bonus\": 27,\n    \"win\": {\n      \"1st\": {\n        \"total amount\": 16250212000,\n        \"number of winners\": 5\n      },\n      \"2nd\": {\n        \"total amount\": 2708368300,\n        \"number of winners\": 11\n      },\n      \"3rd\": {\n        \"total amount\": 2708345200,\n        \"number of winners\": 902\n      },\n      \"4th\": {\n        \"total amount\": 5413372000,\n        \"number of winners\": 40580\n      },\n      \"5th\": {\n        \"total amount\": 6794660000,\n        \"number of winners\": 679466\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<p>\uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c <code><a href=\"http:\/\/$WEBSERVER_HOST:8888\/win_result?round=47\">http:\/\/$WEBSERVER_HOST:8888\/win_result?round=47<\/a><\/code> \uacbd\ub85c\uc5d0 \uc811\uadfc\ud574\ub3c4 \uac19\uc740 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"\/workspace\/wp-content\/uploads\/2018\/12\/lotto_json_47.png\" alt=\"lotto_json_47\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>python flask &#8211; \ucd08\uac04\ub2e8 WEB API\/\ud568\uc218 flask\ub97c \uc774\uc6a9\ud558\uba74 \ub2e8 \uba87 \uc904 \ub9cc\uc73c\ub85c \uc6f9 \uc11c\ube44\uc2a4\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4. \uc124\uce58 pip install flask Hello World \uc544\ub798\uc640 \uac19\uc774 app\uc774\ub77c\ub294 flask \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uace0, decorator\ub97c \uc774\uc6a9\ud574\uc11c \/ \uacbd\ub85c\uc5d0 GET \uc694\uccad\uc774 \uc788\uc744 \ub54c &#8216;Hello Word!&#8217; \ub77c\ub294 \uba54\uc2dc\uc9c0\ub97c \ubfcc\ub824\uc8fc\ub294 \uc6f9\uc11c\ubc84\ub97c \uac04\ub2e8\ud558\uac8c \uc0dd\uc131\ud574\uc904 \uc218 \uc788\ub2e4. # hello_world.py import flask app = flask.Flask(__name__) app.config[&#8220;DEBUG&#8221;] [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,10],"tags":[124,41,34],"class_list":["post-610","post","type-post","status-publish","format-standard","hentry","category-flask","category-python","tag-api","tag-flask","tag-python"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/comments?post=610"}],"version-history":[{"count":7,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/610\/revisions"}],"predecessor-version":[{"id":1191,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/610\/revisions\/1191"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}