Lors de la création d'un backend sur Google Cloud Platform, le déploiement prend environ une minute. Il est donc facile de créer un environnement qui émule localement pendant le développement. Voici comment émuler Cloud Functions dans un environnement Python.
Créez une fonction appelée hello dans main.py et mettez-la
main.py
def hello(request):
request_json = request.get_json()
if request.args and 'message' in request.args:
return request.args.get('message')+'get'
elif request_json and 'message' in request_json:
return request_json['message']+'post'
else:
return f'Hello Worlds!'
Dans ce dossier, saisissez le terminal ci-dessous.
terminal.
functions-framework --target=hello
Lors de la spécification du port, c'est comme suit.
terminal.
functions-framework --target=hello --port=8081
Il s'agit d'une commande curl pour le débogage.
get.la communication
curl -X GET "localhost:8081/?message=Hi,get"
post.la communication
curl -X POST -H "Content-Type: application/json" -d '{"message":"hi,post"}' localhost:8081/
main.py
def hello(request):
request_json = request.get_json()
headers = {
'Access-Control-Allow-Origin': '*',
}
"""
headers = {
'Access-Control-Allow-Origin': 'https://example.com',
}
"""
if request.args and 'message' in request.args:
return (request.args.get('message')+'get', 200, headers)
elif request_json and 'message' in request_json:
return (request_json['message']+'post', 200, headers)
else:
return (f'Hello Worlds!', 200, headers)
Deployment
Si tout se passe bien, déployez sur GCP.
terminal.
gcloud functions deploy hello \
--runtime python37 --trigger-http --allow-unauthenticated
https://cloud.google.com/functions/docs/quickstart
https://github.com/GoogleCloudPlatform/functions-framework-python
En réalité, la valeur de retour est souvent au format JSON, c'est donc le cas.
main.py
import json
def hello(request):
request_json = request.get_json()
headers = {
'Access-Control-Allow-Origin': 'http://localhost:8080',
}
"""
headers = {
'Access-Control-Allow-Origin': 'https://example.com',
}
"""
print('called')
if request.args and 'message' in request.args:
input = request.args.get('message')
rtrn = {'output':'hi %s(get)'%(input)}
return (json.dumps(rtrn), 200, headers)
elif request_json and 'message' in request_json:
input = request_json['message']
rtrn = {'output':'hi %s(post)'%(input)}
return (json.dumps(rtrn), 200, headers)
else:
rtrn = {'output':'hi (no args)'}
return (json.dumps(rtrn), 200, headers)
Pour les modules non standard, vous devez créer require.txt, mais dans ce cas, vous n'en avez pas besoin car c'est juste json.