Rest API dengan FastAPI dan Elasticsearch

Nasri Adzlani
2 min readDec 21, 2020

--

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.

--

--

No responses yet