Kayla Ayu Rachmahyastuti
Microservices adalah suatu framework architecture yang digunakan sebagai model dalam pembuatan aplikasi cloud yang modern. Pada Microservices setiap aplikasi dibangun sebagai sekumpulan service dan setiap layanan berjalan dalam processnya sendiri. Masing-masing dari aplikasi tersebut dapat saling berkomunikasi melalui API atau Application Programming Interface.
Membuat Microservices menggunakan aplikasi VSCODE yang terdiri dari Server 1, Server 2, dan Gateway
Microservices adalah suatu framework architecture yang digunakan sebagai model dalam pembuatan aplikasi cloud yang modern. Pada Microservices setiap aplikasi dibangun sebagai sekumpulan service dan setiap layanan berjalan dalam processnya sendiri. Masing-masing dari aplikasi tersebut dapat saling berkomunikasi melalui API atau Application Programming Interface.
Yang dimana server 1 ini menghubungkan dengan API dari rajaongkir
from email import header
from flask import Flask, jsonify, request
import requests
app = Flask(__name__)
@app.route('/')
@app.route('/index', methods=['GET'])
def index():
return "Berhasil Terhubung ke API"
@app.route('/province', methods=['GET'])
def get_province():
# Input bisa diganti isinya atau dihubungin ke fungsi yang lain
id = request.form['id']
params = dict(id=id)
url = 'https://api.rajaongkir.com/starter/province'
headers = {
'key': "01d6edb0fed618f2563bf4d3f6877d55"
}
response = requests.get(url, headers=headers, params=params)
print(response)
return response.text
@app.route('/city', methods=['GET'])
def get_city():
# Input bisa diganti isinya atau dihubungin ke fungsi yang lain
id = request.form['id']
params = dict(id=id)
url = 'https://api.rajaongkir.com/starter/city'
headers = {
'key': "01d6edb0fed618f2563bf4d3f6877d55"
}
response = requests.get(url, headers=headers, params=params)
print(response)
return response.text
@app.route('/cost', methods=['POST'])
def get_cost():
# Input bisa diganti isinya atau dihubungin ke fungsi yang lain
origin = request.form['origin']
destination = request.form['destination']
weight = request.form['weight']
courier = request.form['courier']
payload = {
"origin": origin,
"destination": destination,
"weight": weight,
"courier": courier
}
url = 'https://api.rajaongkir.com/starter/cost'
headers = {
'key': "01d6edb0fed618f2563bf4d3f6877d55",
'content-type': "application/x-www-form-urlencoded"
}
response = requests.post(url, payload, headers=headers)
print(response)
return response.text
if __name__ == '__main__':
app.run(debug=True,port=5001)
#response_API = requests.get('https://api.rajaongkir.com/starter/province')
#print(response_API.status_code)
Pada server 2 kami membuat endpoint atau data CRUD
#!flask/bin/python
from flask import Flask, request, jsonify, make_response
import pymysql
# Membuat server Flask
app = Flask(__name__)
# Koneksi ke database MySQL
mydb = pymysql.connect(
host="localhost",
user="root",
passwd="",
database="product_db"
)
# Routing Index
@app.route('/')
@app.route('/index')
def index():
return "[SERVER 2] DATABASE PRODUK"
@app.route('/get_product', methods=['GET'])
def get_product():
# Awal Query
query = "SELECT * FROM products WHERE 1=1"
values = ()
# Mengatur Parameter
sku = request.args.get("sku")
product_name = request.args.get("product_name")
weight = request.args.get("weight")
stocks = request.args.get("stocks")
if sku:
query += " AND sku=%s "
values += (sku,)
if product_name:
query += " AND product_name LIKE %s "
values += ("%"+product_name+"%", )
if weight:
query += " AND weight LIKE %s "
values += ("%"+weight+"%", )
if stocks:
query += " AND stocks=%s "
values += (stocks,)
mycursor = mydb.cursor()
mycursor.execute(query, values)
row_headers = [x[0] for x in mycursor.description]
data = mycursor.fetchall()
json_data = []
for result in data:
json_data.append(dict(zip(row_headers, result)))
return make_response(jsonify(json_data),200)
@app.route('/insert_product', methods=['POST'])
def insert_product():
hasil = {"status": "gagal insert produk"}
try:
data = request.json
query = "INSERT INTO products(sku, product_name, weight, stocks) VALUES(%s,%s,%s,%s)"
values = (data["sku"], data["product_name"], data["weight"], data["stocks"], )
mycursor = mydb.cursor()
mycursor.execute(query, values)
mydb.commit()
hasil = {"status": "berhasil insert produk"}
except Exception as e:
print("Error: " + str(e))
hasil = {
"status": "gagal insert data produk",
"error" : str(e)
}
return jsonify(hasil)
@app.route('/update_product', methods=['PUT'])
def update_product():
hasil = {"status": "gagal update data produk"}
try:
data = request.json
sku_awal = data["sku_awal"]
query = "UPDATE products SET sku = %s "
values = (sku_awal, )
if "sku_ubah" in data:
query += ", sku = %s"
values += (data["sku_ubah"], )
if "product_name" in data:
query += ", product_name = %s"
values += (data["product_name"], )
if "weight" in data:
query += ", weight = %s"
values += (data["weight"], )
if "stocks" in data:
query += ", stocks = %s"
values += (data["stocks"], )
query += " WHERE sku = %s"
values += (sku_awal, )
mycursor = mydb.cursor()
mycursor.execute(query, values)
mydb.commit()
hasil = {"status": "berhasil update data produk"}
except Exception as e:
print("Error: " + str(e))
return jsonify(hasil)
@app.route('/delete_product/<sku>', methods=['DELETE'])
def delete_product(sku):
hasil = {"status": "gagal hapus data produk"}
try:
# data = request.json
query = "DELETE FROM products WHERE sku=%s"
values = (sku,)
mycursor = mydb.cursor()
mycursor.execute(query, values)
mydb.commit()
hasil = {"status": "berhasil hapus data produk"}
except Exception as e:
print("Error: " + str(e))
return jsonify(hasil)
@app.route('/total_weight', methods=['POST'])
def hitung_nilai():
hasil = {"status": "gagal hitung total berat"}
try:
data = request.json
if "berat_barang" not in data:
return jsonify({
"error" : "Data berat_barang tidak ada didalam Request Body"
})
berat_barang = data["berat_barang"]
jumlah_barang = data["jumlah_barang"]
total_berat = (berat_barang * jumlah_barang)
hasil = {
"status": "berhasil hitung total berat",
"total_berat" : total_berat
}
except Exception as e:
print("Error: " + str(e))
return jsonify(hasil)
if __name__ == '__main__':
app.run(debug=True,port=5002)
from flask import Flask, jsonify, request
import requests
app = Flask(__name__)
@app.route('/')
@app.route('/index', methods=['GET'])
def index():
url = 'http://127.0.0.1:5001'
response = requests.get(url)
return response.text
#server1
@app.route('/server1/gettasks', methods=['GET'])
def gettasks1():
id = request.form['id']
form = dict(id=id)
url = 'http://127.0.0.1:5001/province'
response = requests.get(url, data=form)
return response.json()
@app.route('/server1/gettasks1', methods=['GET'])
def gettasks2():
id = request.form['id']
form = dict(id=id)
url = 'http://127.0.0.1:5001/city'
response = requests.get(url, data=form)
return response.json()
@app.route('/server1/gettasks2', methods=['POST'])
def gettasks3():
origin = request.form['origin']
destination = request.form['destination']
weight = request.form['weight']
courier = request.form['courier']
form = dict(origin=origin, destination=destination, weight=weight, courier=courier)
url = 'http://127.0.0.1:5001/cost'
response = requests.post(url, data=form)
return response.json()
#server2
@app.route('/server2/gettasks', methods=['GET'])
def getdata():
product_name = request.form['product_name']
sku = request.form['sku']
weight = request.form['weight']
stocks = request.form['stocks']
form = dict(product_name=product_name, sku=sku, weight=weight, stocks=stocks)
url = 'http://127.0.0.1:5002/get_product'
response = requests.get(url, params=form)
return response.text
if __name__ == '__main__':
app.run(debug=True, port=5003, host='0.0.0.0')