CURL: Difference between revisions
Jump to navigation
Jump to search
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
sudo apt update | sudo apt update | ||
sudo apt install curl && curl --version | sudo apt install curl && curl --version | ||
==Playground== | |||
{| | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# post request body | |||
time cat <<< '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}'| curl http://127.0.0.1:1983/api/v1/collections\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
--data @- | |||
</syntaxhighlight> | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# post request body | |||
time curl http://127.0.0.1:1983/api/v1/collections\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
--data '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}' | |||
</syntaxhighlight> | |||
|- | |||
| colspan="3" | | |||
---- | |||
|- | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# put request body | |||
time cat <<< '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}'| curl http://127.0.0.1:1983/api/v1/collections/1000\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
-X PUT \ | |||
--data @- | |||
</syntaxhighlight> | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# put request body | |||
time curl http://127.0.0.1:1983/api/v1/collections/1000\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
-X PUT \ | |||
--data '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}' | |||
</syntaxhighlight> | |||
|- | |||
| colspan="3" | | |||
---- | |||
|- | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# delete response body | |||
time cat <<< '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}'| curl http://127.0.0.1:1983/api/v1/collections/1000\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
-X DELETE \ | |||
--data @- | |||
</syntaxhighlight> | |||
| valign="top" | | |||
<syntaxhighlight lang="bash"> | |||
# delete response body | |||
time curl http://127.0.0.1:1983/api/v1/collections/1000\ | |||
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\ | |||
-H 'Content-Type:application/json'\ | |||
-X DELETE \ | |||
--data '{ | |||
"code": "M", | |||
"name": "Male", | |||
"group": "gender", | |||
"properties": {}, | |||
"extendedProperties": {} | |||
}' | |||
</syntaxhighlight> | |||
|- | |||
| colspan="3" | | |||
---- | |||
|- | |||
| valign="top" | | |||
time curl http://127.0.0.1:1983/api/v1/collections/gender/M | |||
time curl http://127.0.0.1:1983/api/v1/collections/gender | |||
time curl http://127.0.0.1:1983/api/v1/collections | |||
time curl http://127.0.0.1:1983/api/v1/collections/-/ar_SA | |||
time curl http://127.0.0.1:1983/api/v1/collections/-/bn_BD | |||
time curl http://127.0.0.1:1983/api/v1/collections/-/en_US | |||
time curl https://cdn.chorke.org/exec/cli/ | |||
curl --version | |||
curl --help | |||
| valign="top" | | |||
|} | |||
==Mock API== | |||
<syntaxhighlight lang="bash"> | |||
python3 -m venv ~/.venv/mockapi --prompt="MockApi" | |||
source ~/.venv/mockapi/bin/activate | |||
pip install Flask | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="python"> | |||
rm rf ~/Documents/flask-playground/MockApi/*.py | |||
cat << EOF | tee ~/Documents/flask-playground/MockApi/__main__.py >/dev/null | |||
from flask import Flask, request, json | |||
import time, os | |||
app = Flask(__name__) | |||
basedir = os.path.abspath(os.path.dirname(__file__)) | |||
def load_collections(): | |||
jsonurl = os.path.join(basedir, 'collections-v1.json') | |||
return json.load(open(jsonurl)) | |||
@app.route("/api/v1/collections", methods=['GET']) | |||
def find_all(): | |||
time.sleep(1) | |||
return load_collections() | |||
@app.route("/api/v1/collections/<string:group>", methods=['GET']) | |||
def find_by_group(group): | |||
collections = load_collections() | |||
fetch_group = collections[group] | |||
return fetch_group | |||
@app.route("/api/v1/collections/<string:group>/<string:code>", methods=['GET']) | |||
def find_by_group_and_code(group, code): | |||
collections = load_collections() | |||
fetch_group = collections[group] | |||
fetch_monad = next(filter(lambda monad: (monad['code']==code), fetch_group), None) | |||
return fetch_monad | |||
@app.route("/api/v1/collections/-/<string:locale>", methods=['GET']) | |||
def find_by_locale(locale): | |||
collections = load_collections() | |||
group_names = list(collections.keys()) | |||
locale_data = dict(map(lambda n: | |||
(n, list(map(lambda c: { | |||
'domain':c['domain'], | |||
'group' :c['group'], 'code':c['code'], | |||
'name' :c['extendedProperties']['locale'][locale] | |||
}, | |||
collections[n])) | |||
), group_names)) | |||
return locale_data | |||
@app.route("/api/v1/collections", methods=['POST']) | |||
def create(): | |||
return request.json | |||
@app.route("/api/v1/collections/<int:id>", methods=['PUT']) | |||
def update_by_id(id): | |||
return request.json | |||
@app.route("/api/v1/collections/<int:id>", methods=['DELETE']) | |||
def delete_by_id(id): | |||
return request.json | |||
if __name__ == "__main__": | |||
app.run(host='127.0.0.1', port=1983, debug=True) | |||
EOF | |||
python ~/Documents/flask-playground/MockApi | |||
</syntaxhighlight> | |||
==Seed Data== | |||
<syntaxhighlight lang="bash"> | |||
time cat <<< '{ | |||
"gender":[ | |||
{ | |||
"domain":"chorke.org", "group":"gender", "code":"M", "name":"Male", | |||
"properties":{}, "extendedProperties":{ | |||
"code":{ | |||
"ISO":1, | |||
"SCTID":"446151000124109" | |||
}, | |||
"locale":{ | |||
"ar_SA":"ذكر", | |||
"en_US":"Male", | |||
"bn_BD":"পুরুষ", | |||
"he_IL":"זָכָר", | |||
"ms_MY":"Jantan" | |||
} | |||
} | |||
}, | |||
{ | |||
"domain":"chorke.org", "group":"gender", "code":"F", "name":"Female", | |||
"properties":{}, "extendedProperties":{ | |||
"code":{ | |||
"ISO":2, | |||
"SCTID":"446141000124107" | |||
}, | |||
"locale":{ | |||
"ar_SA":"أنثى", | |||
"en_US":"Female", | |||
"bn_BD":"মহিলা", | |||
"he_IL":"נְקֵבָה", | |||
"ms_MY":"Perempuan" | |||
} | |||
} | |||
}, | |||
{ | |||
"domain":"chorke.org", "group":"gender", "code":"U", "name":"Unknown", | |||
"properties":{}, "extendedProperties":{ | |||
"code":{ | |||
"ISO":0, | |||
"SCTID":"UNK" | |||
}, | |||
"locale":{ | |||
"ar_SA":"مجهول", | |||
"bn_BD":"অজানা", | |||
"en_US":"Unknown", | |||
"he_IL":"לא ידוע", | |||
"ms_MY":"Tidak Diketahui" | |||
} | |||
} | |||
}, | |||
{ | |||
"domain":"chorke.org", "group":"gender", "code":"N", "name":"Not Applicable", | |||
"properties":{}, "extendedProperties":{ | |||
"code":{ | |||
"ISO":9, | |||
"SCTID":"33791000087105" | |||
}, | |||
"locale":{ | |||
"ar_SA":"غير قابل للتطبيق", | |||
"bn_BD":"প্রযোজ্য নয়", | |||
"en_US":"Not Applicable", | |||
"he_IL":"לא ישים", | |||
"ms_MY":"Tidak Berkaitan" | |||
} | |||
} | |||
} | |||
] | |||
}'| tee ~/Documents/flask-playground/MockApi/collections-v1.json >/dev/null | |||
</syntaxhighlight> | |||
==References== | ==References== | ||
Line 29: | Line 294: | ||
| valign="top" | | | valign="top" | | ||
* [https://stackoverflow.com/questions/43054195/ cURL » Post Raw Body Data] | |||
* [https://stackoverflow.com/questions/12583930/ cURL » Use Standard Input] | |||
|- | |- | ||
Line 48: | Line 315: | ||
| valign="top" | | | valign="top" | | ||
* [[HTTPie]] | * [[HTTPie]] | ||
* [[Locale]] | |||
* [[Flask]] | * [[Flask]] | ||
Latest revision as of 19:51, 22 April 2024
sudo apt update sudo apt install curl && curl --version
Playground
# post request body
time cat <<< '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'| curl http://127.0.0.1:1983/api/v1/collections\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
--data @-
|
# post request body
time curl http://127.0.0.1:1983/api/v1/collections\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
--data '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'
| |
| ||
# put request body
time cat <<< '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'| curl http://127.0.0.1:1983/api/v1/collections/1000\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
-X PUT \
--data @-
|
# put request body
time curl http://127.0.0.1:1983/api/v1/collections/1000\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
-X PUT \
--data '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'
| |
| ||
# delete response body
time cat <<< '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'| curl http://127.0.0.1:1983/api/v1/collections/1000\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
-X DELETE \
--data @-
|
# delete response body
time curl http://127.0.0.1:1983/api/v1/collections/1000\
-H 'x-auth-key:aeda11fd-14ea-44d0-aff6-e94bf6b78c1b'\
-H 'Content-Type:application/json'\
-X DELETE \
--data '{
"code": "M",
"name": "Male",
"group": "gender",
"properties": {},
"extendedProperties": {}
}'
| |
| ||
time curl http://127.0.0.1:1983/api/v1/collections/gender/M time curl http://127.0.0.1:1983/api/v1/collections/gender time curl http://127.0.0.1:1983/api/v1/collections time curl http://127.0.0.1:1983/api/v1/collections/-/ar_SA time curl http://127.0.0.1:1983/api/v1/collections/-/bn_BD time curl http://127.0.0.1:1983/api/v1/collections/-/en_US time curl https://cdn.chorke.org/exec/cli/ curl --version curl --help |
Mock API
python3 -m venv ~/.venv/mockapi --prompt="MockApi"
source ~/.venv/mockapi/bin/activate
pip install Flask
rm rf ~/Documents/flask-playground/MockApi/*.py
cat << EOF | tee ~/Documents/flask-playground/MockApi/__main__.py >/dev/null
from flask import Flask, request, json
import time, os
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
def load_collections():
jsonurl = os.path.join(basedir, 'collections-v1.json')
return json.load(open(jsonurl))
@app.route("/api/v1/collections", methods=['GET'])
def find_all():
time.sleep(1)
return load_collections()
@app.route("/api/v1/collections/<string:group>", methods=['GET'])
def find_by_group(group):
collections = load_collections()
fetch_group = collections[group]
return fetch_group
@app.route("/api/v1/collections/<string:group>/<string:code>", methods=['GET'])
def find_by_group_and_code(group, code):
collections = load_collections()
fetch_group = collections[group]
fetch_monad = next(filter(lambda monad: (monad['code']==code), fetch_group), None)
return fetch_monad
@app.route("/api/v1/collections/-/<string:locale>", methods=['GET'])
def find_by_locale(locale):
collections = load_collections()
group_names = list(collections.keys())
locale_data = dict(map(lambda n:
(n, list(map(lambda c: {
'domain':c['domain'],
'group' :c['group'], 'code':c['code'],
'name' :c['extendedProperties']['locale'][locale]
},
collections[n]))
), group_names))
return locale_data
@app.route("/api/v1/collections", methods=['POST'])
def create():
return request.json
@app.route("/api/v1/collections/<int:id>", methods=['PUT'])
def update_by_id(id):
return request.json
@app.route("/api/v1/collections/<int:id>", methods=['DELETE'])
def delete_by_id(id):
return request.json
if __name__ == "__main__":
app.run(host='127.0.0.1', port=1983, debug=True)
EOF
python ~/Documents/flask-playground/MockApi
Seed Data
time cat <<< '{
"gender":[
{
"domain":"chorke.org", "group":"gender", "code":"M", "name":"Male",
"properties":{}, "extendedProperties":{
"code":{
"ISO":1,
"SCTID":"446151000124109"
},
"locale":{
"ar_SA":"ذكر",
"en_US":"Male",
"bn_BD":"পুরুষ",
"he_IL":"זָכָר",
"ms_MY":"Jantan"
}
}
},
{
"domain":"chorke.org", "group":"gender", "code":"F", "name":"Female",
"properties":{}, "extendedProperties":{
"code":{
"ISO":2,
"SCTID":"446141000124107"
},
"locale":{
"ar_SA":"أنثى",
"en_US":"Female",
"bn_BD":"মহিলা",
"he_IL":"נְקֵבָה",
"ms_MY":"Perempuan"
}
}
},
{
"domain":"chorke.org", "group":"gender", "code":"U", "name":"Unknown",
"properties":{}, "extendedProperties":{
"code":{
"ISO":0,
"SCTID":"UNK"
},
"locale":{
"ar_SA":"مجهول",
"bn_BD":"অজানা",
"en_US":"Unknown",
"he_IL":"לא ידוע",
"ms_MY":"Tidak Diketahui"
}
}
},
{
"domain":"chorke.org", "group":"gender", "code":"N", "name":"Not Applicable",
"properties":{}, "extendedProperties":{
"code":{
"ISO":9,
"SCTID":"33791000087105"
},
"locale":{
"ar_SA":"غير قابل للتطبيق",
"bn_BD":"প্রযোজ্য নয়",
"en_US":"Not Applicable",
"he_IL":"לא ישים",
"ms_MY":"Tidak Berkaitan"
}
}
}
]
}'| tee ~/Documents/flask-playground/MockApi/collections-v1.json >/dev/null
References
| ||