Rest API dengan FastAPI dan Elasticsearch
FastAPI adalah sebuah framework python yang digunakan untuk membangun API(). FastAPI merupakan salah satu framework python yang memiliki performa bagus dalam membangun API. Bahkan lebih dari itu, dalam documentasinya yang bisa kita lihat disini, FastAPI memiliki banyak kelebihan lain.
Elasticsearch adalah salah satu database yang masuk ke dunia NoSQL dengan fokus di search engine database. Elasticsearch ditenagai oleh Apache Lucene yang juga merupakan search engine database yang memiliki query low level. Elasticsearch memiliki query yang lebih mudah untuk digunakan karena berbasis RESTful.
bahan yang dibutuhkan antara lain
🔹 pip install fastapi uvicorn
🔹 pip install fastapi
🔹 pip install elasticsearch
Jika kedua library di atas sudah terinstall dengan benar, saatnya kita mencoba membuat API. Kita buat sebuah file dengan nama main.py,
import yang dibutuhkan
from elasticsearch import Elasticsearch
from fastapi import FastAPI
import uvicorn
Deklarasi yang dilakukan
app = FastAPI()
es = Elasticsearch('http://localhost:9200/')
Macam fungsi di FastAPI
@app.get("/field") --> Untuk ambil value
@app.post("/field") --> Untuk Ingest / Update
@app.put("/field") --> Untuk Membuat Index
@app.delete("/field") --> Untuk Menghapus
Configure
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8899) -> Bisa edit Port
Full SourceCode
from elasticsearch import Elasticsearch
from fastapi import FastAPI
import uvicorn
import json
app = FastAPI()
es = Elasticsearch('http://localhost:9200/')
@app.get("/get_account")
def read_root():
data = es.search(index="ta_identity",body={"query":{"match_all":{}}})
hits = data['hits']['hits']
return hits
@app.get("/search_account")
def search_id(username: str, password: str):
data = es.search(index="ta_identity",body={"query":{"bool":{"must":[{"match":{"data.id":username}},{"match":{"data.password":password}}]}}})
return data['hits']['hits']
@app.post("/register_account")
def register(name:str,username:str,email:str,password:str,number:str):
total = es.search(index="ta_identity",body={"query":{"match_all":{}}})
totals = total['hits']['total']
val = totals['value']
newId = val + 1
data = es.index(index="ta_identity",id=newId, body={"data":{"name":name,"id":username,"email":email,"password":password,"number":number}})
return {"status":"data has been created"}
@app.delete("/delete_account")
def delete_account(username:str):
get_id = es.search(index="ta_identity",body={"query":{"match":{"data.id":username}}})
data = json.dumps(get_id['hits']['hits'])
x= json.loads(data)
id = x[0]['_id']
es.delete(index="ta_identity", id=id)
return "delete "+id+" has success"
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8899)
Thanks.