Skip to content

Instantly share code, notes, and snippets.

@andreztz
Created June 10, 2016 04:23
Show Gist options
  • Save andreztz/085aee04b98b13ce60226cc578fc826c to your computer and use it in GitHub Desktop.
Save andreztz/085aee04b98b13ce60226cc578fc826c to your computer and use it in GitHub Desktop.
Intro api rest with Flask
from flask import Flask
from flask import jsonify
from flask import request
app = Flask(__name__)
languages =[
{'name': 'JavaScript'},
{'name': 'Python'},
{'name': 'Ruby'}
]
@app.route('/', methods=['GET'])
def index():
return jsonify({'message': 'It work!'})
@app.route('/lang', methods=['GET'])
def returnAll():
return jsonify({'languages': languages})
@app.route('/lang/<string:name>', methods=['GET'])
def returnOne(name):
lang = [lang for lang in languages if lang['name'] == name]
return jsonify({'language': lang})
@app.route('/lang', methods=['POST'])
def addOne():
"""
Method Post.
>>> import requests
>>> from pprint import pprint
>>> url = 'http://127.0.0.1:5000/lang'
>>> data = {'name': 'c++'}
>>> resp = requests.post(url, json=data)
>>> pprint(resp.json())
{'languages': [{'name': 'JavaScript'},
{'name': 'Python'},
{'name': 'Ruby'},
{'name': 'c++'}]}
>>>
"""
lang = {'name': request.json['name']}
languages.append(lang)
return jsonify({'languages': languages})
@app.route('/lang/<string:name>', methods=['PUT'])
def editOne(name):
"""
Update.
[{'name': 'JavaScript'}, {'name': 'Python'}, {'name': 'Ruby'}]
>>> url
'http://127.0.0.1:5000/lang/JavaScript'
>>> data = {'name': 'Go'}
>>> resp = requests.put(url, json=data)
>>> resp.status_code
200
>>> pprint(resp.json())
{'languages': {'name': 'Go'}}
>>>
[{'name': 'Go'}, {'name': 'Python'}, {'name': 'Ruby'}]
"""
print(languages)
lang = [lang for lang in languages if lang['name'] == name]
lang[0]['name'] = request.json['name']
print(languages)
return jsonify({'languages': lang[0]})
@app.route('/lang/<string:name>', methods=['DELETE'])
def deleteOne(name):
"""
Method Delete.
>>> url = 'http://127.0.0.1:5000/lang/Python'
>>> resp = requests.delete('url')
>>> resp.json()
{'languages': [{'name': 'JavaScript'}, {'name': 'Ruby'}]}
"""
print(languages)
lang = [lang for lang in languages if lang['name'] == name]
# i = languages.index(lang[0])
# languages.pop(i)
languages.remove(lang[0])
print(languages)
return jsonify({'languages': languages})
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment