Zephyrnet Logosu

Python ve Flask ile Rest API ile ilgili Eksiksiz Kılavuz

Tarih:

Bu makale, Veri Bilimi Blogathon.

, Umarım iyisindir. Flask kullanarak bir REST API oluşturma hakkında güzel bir makaleye hoş geldiniz. Önceki makalelerimizden birinde Flask'ın temellerini ve nasıl ayarlanacağını öğrendik. Flask ile eksiksiz bir son uç makine öğrenimi projesi yaptık. Bir önceki yazıya adresinden ulaşabilirsiniz. okuyun. Ancak insanların REST API hakkında birçok şüphesi var, onu farklı bir kullanım durumu için nasıl oluşturabiliriz veya doğrulama, kod dönüştürme vb. gibi bazı görevleri nasıl gerçekleştirebiliriz. Bu eğitimde, Flask API'yi oluşturmayı ve REST API'lerimizi çalıştırmayı pratik olarak öğreneceğiz. daha güçlü. Buna başlamadan önce, temel Python ve Flask'a aşina olduğunuzu varsayıyorum.

İçindekiler

  1. REST API'ye Kısa Giriş
  2. Flask kullanarak ilk REST API'nizi oluşturun
  3. REST API ile Farklı HTTP İsteği
  4. REST API'de Dekoratörleri Kullanma
  5. Flask API'sinin Güvenliği Nasıl Sağlanır?
  6. Flask API'sinde izleme nasıl etkinleştirilir
  7. REST API için Birim testi Yazma
  8. Son Notlar

REST API (Uygulama Programlama Arayüzü) Nedir?

REST API, uygulamaları entegre etmeye veya RESTful web hizmetleriyle etkileşime izin veren Restful API'nin kısaltmasıdır. Artık bir mikro hizmet mimarisindeki bileşenleri bağlamak için en yaygın yöntem olarak büyüyor. API'ler, bir web sitesine veri almanızı veya göndermenizi ve görevinizi bir web hizmeti üzerinden yapmak için bazı eylemler gerçekleştirmenizi sağlar. Her web sitesi, güncel bir fiyat ve yükseliş elde etmek için Sensex veya Nifty ile entegre olan borsa ticareti web siteleri gibi farklı API türleri kullanır. Bilet rezervasyon uygulamaları, güncel verileri tanıdık bir arayüzde tutmak için istenen tek portal API'sini kullanır.

İlk REST API'nizi oluşturun

gelelim kod düzenleyiciye. Rahat ettiğiniz herhangi bir Python IDE'sini kullanabilirsiniz. Merhaba dünya API'sini oluşturuyoruz; bu, bir alma isteğine basarsanız, bir JSON yanıtı alacağınızı söyler, çünkü API'nin her zaman JSON tipi bir yanıt vermesi evrenseldir. Umarım Flask'ı yüklemişsinizdir; aksi halde PIP komutunu kullanın ve aşağıdaki kodu kullanarak kurun. Yeni bir python dosyası oluşturun ve aşağıdaki kodu yazın.

pip flask yükleyin pip flask-rahatlatıcı yükleyin
flask'tan import Flask from flask_restful import Kaynak, Api app = Flask(__name__) api = Api(app) class Helloworld(Resource): def __init__(self): pass def get(self): return { "Merhaba": "Dünya" } api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Flask-Dinlendirici nedir?

Flask restful, her HTTP yöntemi için yöntemler içeren kaynak sınıfını tanımlar. Yöntem adı, karşılık gelen HTTP yöntemiyle aynı olmalı ve küçük harfle yazılmalıdır. Bunu yukarıdaki kodda gözlemleyebilirsiniz. Ancak, bu yöntemlerin bir rota dekoratörü yoktur, bu nedenle kaynak rotalarına dayanırlar. Hangi sınıfı tanımlarsak tanımlayalım, ona rotayı add resource yöntemini kullanarak ve hangi rotada çağırmamız gerektiğini tanımlarız.

açıklama ~ Yukarıdaki kodda, önce gerekli üst sınıfları yüklüyoruz, ardından uygulamamızı ve API'mizi başlatıyoruz. Bundan sonra bir kurs oluşturuyoruz ve bu sınıfa biri isabet ederse, JSON formatında yanıt olarak Merhaba dünya alacağını belirten bir GET isteği yapıyoruz. Belirli bir URL'yi açmak için kaynak ekleme yöntemini kullanır ve onu varsayılan eğik çizgiye yönlendiririz. Bu dosyayı çalıştırmak için API'leri oluşturmak, test etmek ve yönetmek için bir API bakım aracı olan POSTMAN aracını kullanabilirsiniz. Aşağıdaki kodu kullanarak bu API'yi denemek için istek modülünü de kullanabilirsiniz. İlk olarak, size localhost URL'sini verecek olan yukarıdaki dosyayı çalıştırın ve başka bir komut isteminde aşağıdaki kod dosyasını çalıştırın.

istekleri içe aktar url = "http://127.0.0.1:5000/" yanıt = request.get(url=url) print(response.text)
çıktı | Python ve Flask ile API

Flask RESTApi aracılığıyla HTTP İsteğini Anlamak

Artık REST API'ye aşinayız. Bu başlık altında, sunucudan elde edilen tüm verileri bir sözlük (JSON nesnesi) biçiminde depolayacak bir liste tanımlayacağımız REST API kullanarak farklı HTTP yöntemlerini keşfedeceğiz. Bu önemlidir, çünkü projelerde veri sonrası verileri ancak verileri başka bir yerde almak için farklı API'lerimiz vardır.

Burada, GET, POST ve DELETE adında 3 HTTP yöntemi oluşturacağımız bir API oluşturuyoruz, burada bir özelleştirme URL'si oluşturacağız ve POST yöntemini talep ettiğinizde, girdi olarak Ad alacağını ve GET yöntemine basıldığında, olacağını söyleyeceğiz. o Adı geri ver ve Silmede, eğer mevcutsa bu Adı sileriz ve buna tekrar erişmek bize NULL verecektir. Bir dosya oluşturun ve aşağıdaki kodu yazın.

flask'tan import Flask from flask_restful import Kaynak, Api app = Flask(__name__) api = Api(app) data = [] class People(Resource): def get(self): for x in data: if x['Data'] == isim: dönüş x dönüş {'Veri': Yok} def post(self, name): temp = {'Data': name} data.append(temp) dönüş temp def delete(self): for ind, x in numaralandırma(veri): if x['Veri'] == ad: temp = data.pop(ind) return {'Not': 'Silindi'} api.add_resource(Kişi, '/Ad/') if __name__ == '__main__': app.run(debug=Doğru)

POSTMAN API aracını açın ve her HTTP yöntemi isteğine basın. İlk olarak, Ad kullanarak post request kullandığımızda bize bir isim verir. İsteği alırken, Adı geri alırız. Silince silinir ve tekrar geri almaya çalıştığınızda size NULL verecektir. Aşağıdaki sonuçları gözlemleyin.

HTTP'yi Anlamak
HTTP'nin Yanıtı | Python ve Flask ile API
Python ve Flask ile API

Flask REST API'sinde Dekoratörler nasıl kullanılır?

IP adreslerini, tanımlama bilgilerini vb. izlemek için API'li dekoratörler kullanıyoruz. Bu başlık altında, dekoratörlerle flask API'sinden nasıl yararlanılacağını öğreneceğiz. Dekoratör, argüman olarak başka bir işlevi alan ve başka bir işlev döndüren bir işlevdir. Mevcut işlevi değiştirmeden veya değiştirmeden mevcut işleve bazı ek işlevler sağlayan bir işlev olarak da anlayabilirsiniz.

Burada yeni bir dosya oluşturuyoruz ve size iki dekoratör oluşturarak göstereceğim. İlkinde, kod yürütme zamanını döndüren harici zaman fonksiyonunu yapıyoruz. Sarma işlevine uygulanan sarma dekoratörünü şuradan içe aktarıyoruz: işlev araçları modül (yüksek dereceli python işlevleri için standart modül). Tüm argümanlarını kopyalayarak sarılmış işlevi günceller.

şişeden ithalat şişesi

flask_restful içe aktarma Kaynağından, Api

datetime alma

şişe içe aktarma isteğinden

functools ithalat paketlerinden

app = Flask (__ name__)

API = API(uygulama)

def zaman(işlev=Yok):

@wraps(işlev)

def sarmalayıcı(*args, **kwargs):

s = tarihsaat.tarihsaat.now()

_ = işlev(*args, **kwargs)

e = tarihsaat.tarihsaat.now()

print(“Yürütme Süresi : {} “.format(lar))

dönüş _

iade paketi

sınıf HelloWorld(Kaynak):

@monitör

def almak(kendi):

dönüş {'merhaba': 'dünya'}

api.add_resource(MerhabaDünya, '/')

eğer __name__ =='__main__':

app.run(hata ayıklama=Doğru)


Şişe Aletlerinde Dekoratörler

Çerezleri ve IP adreslerini izlemek için ikinci dekoratörü oluşturuyoruz, bu nedenle aşağıdaki işlevi yapın. Merhaba dünya işlevine bir zaman dekoratörü eklemek yerine, bir monitör dekoratörü ekleyin ve kodu çalıştırın.

def monitor(function=Yok): @wraps(function) def wrapper(*args, **kwargs): _ = function(*args, **kwargs) print("Ip Adresi: {} ".format(request.remote_user) )) print("Çerezler : {} ".format(request.cookies)) print(request.user_agent) return _ return sarmalayıcı

Temel Kimlik Doğrulama ile Flask API'yi daha güvenli hale getirme

API'yi tasarlarken güvenliği de sağlamalıyız çünkü birçok kişi ona erişecektir. API'ye yalnızca yetkili kişilerin erişmesini istiyorsanız, çünkü API, bazı taraflar arasında bazı gizli veriler içerebileceğinden, bizim bunu yapabilmemiz için? Flask temel kimlik doğrulamasını kullanma. Bu şişe modülünü pip komutunu kullanarak kurmanız gerekir.

pip yükleme şişesi-httpauth

Bir API oluşturuyoruz ve kullanıcı adı ve şifreyi içeren Kullanıcı verileri sözlüğünü tanımlıyoruz. Gerçek zamanlı kullanım durumlarında çalışırken, kullanıcı adını ve parolayı bir yapılandırma dosyası aracılığıyla veya bir veritabanından kabul edersiniz. İlk olarak, kullanıcı adı ve şifreyi eşleştirmek için birincil bir işlev ve bu API'ye ulaşan herkesin giriş yapmadan verilere erişemeyeceğimizi söyleyen bir GET yöntemi oluşturuyoruz.

flask'tan flask'ı içe aktar flask_restful'dan içe aktar Kaynak, flask_httpauth'tan Api içe aktar HTTPBasicAuth app = Flask(__name__) api = Api(app, prefix="/api/v1") auth = HTTPBasicAuth() USER_DATA = { "admin": "SuperSecretPwd" } #route parolayı doğrulamak için @auth.verify_password def doğrulama(kullanıcı adı, parola): if not(kullanıcı adı ve parola): false döndürmek USER_DATA.get(kullanıcı adı) == parola sınıfı PrivateResource(Kaynak): @auth.login_required def get(self): return {"Josh nasıl": "Yüksek"} api.add_resource(PrivateResource, '/private') if __name__ == '__main__': app.run(debug=True)

Yukarıdaki dosyayı POSTMAN kullanarak çalıştırdığımızda, size yetkisiz erişim sağlamak için verileri giriş yapmadan almaya çalışıyoruz.

Temel kimlik doğrulaması

Şimdi yetkilendirmeye gidin ve Temel Yetkilendirmeye tıklayın. Kullandığınız kullanıcı adını ve şifreyi girin ve ardından istediğiniz sonucu almak için GET isteğine basın.

Python ve Flask ile API

Flask API'nizin güvenliğini bu şekilde sağlayabilirsiniz. Flask Temel Yetkilendirme hakkında daha fazla bilgi için adresini ziyaret edebilirsiniz. Re-Tweet blogu.

Flask API'sinde İzlemeyi Etkinleştirme

API'mizi yetkisiz girişlerden nasıl koruyacağımızı öğrendik, ancak API'mize erişen bir kişinin konumunu (enlem ve boylam noktaları), IP adresini, sunucu adı gibi ayrıntılarını da bilmek istiyorsak, böylece API'yi yapılandırabiliriz. REST API'miz ile temel flask İzleme uygulaması. İlk olarak, PIP Komutunu kullanarak şişe izleme paketini kurun.

pip yükleme şişesi-iz-kullanımı
flask'tan import Flask, g app = Flask(__name__) app.config['TRACK_USAGE_USE_FREEGEOIP'] = False app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = flask_track_usage'dan 'include' flask_track_usage'den TrackUsage importWask_track_usage'den importWask_print_print. .output import OutputWriter t = TrackUsage(app, [ PrintWriter(), OutputWriter(transform=lambda s: "OUTPUT: " + str(s)) ]) @t.include @app.route('/') def index( ): g.track_var["opsiyonel"] = "Write_Something" return "Merhaba" #Uygulamayı çalıştır if __name__ == "__main__": app.run(debug=True)

açıklama ~ Kurulan paketten Kullanım Takibi, Girdi yazıcısı ve çıktı yazıcısını import ederek bir takip uygulaması oluşturacağız. Flask uygulamamızı Track paketine geçirip Çıktı yazıcısını kullanıyoruz ve çıktıyı string formatında yazmak için tek satırlı bir fonksiyon olan lambda fonksiyonunu kullanıyoruz. Bundan sonra slash üzerinde temel bir routing oluşturuyoruz ve track uygulamamızı dekoratör olarak dahil ediyoruz. G, verilerin bağlam içinde küresel olduğunu söyleyen küresel anlamına gelir. Bu nedenle, tarayıcı dönüşünde merhaba, ancak arka uçta kişinin tüm bilgilerini alacağınız temel bir API oluşturduk. Komut isteminde aşağıdaki çıktıyı gözlemleyebilirsiniz.

Flask üzerinde izleme

Çıktıyı iyi biçimlendirilmiş bir şekilde görmek için JSON Formatter'ı kullanabilirsiniz.

çıktı | Python ve Flask ile API

REST API'niz için Birim Test kodu nasıl yazılır

Artık durumunuz için mükemmel bir REST API oluşturdunuz. Yine de yöneticiniz sizden REST API için bir Birim testi kodu yazmanızı isteyecektir çünkü API'nizdeki yaygın hataları tespit etmek ve üretimin güvenliğini sağlamaya yardımcı olmak çok önemlidir. Umarım sizinle birlikte oluşturulmuş basit bir API'niz vardır. Değilse, run adlı yeni bir dosya oluşturun ve aşağıdaki basit API'yi geliştirin.

flask'tan import Flask from flask_restful import Resource, Api import json app = Flask(__name__) api = Api(app) class Helloworld(Resource): def __init__(self): pass def get(self): return json.dumps({" Mesaj": "İyi"}) api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Şimdi, API'mizi test eden birim için kodu yazacağımız başka bir dosya adı testi oluşturun. Bu nedenle, en yaygın olarak, her zaman aşağıdaki üç temel birim testini gerçekleştirmeniz gerekir.

  • Yanıt kodunun 200 olup olmadığını kontrol edin
  • API'den yazılan içeriğin JSON Formatlı bir uygulama olduğunu kontrol edin
  • Eriştiğimiz tüm anahtarların API veri işlemede mevcut olduğunu kontrol edin.
çalıştırmadan import app import unittest class FlaskTest(unittest.TestCase): #Check for yanıt 200 def test_inde(self): tester = app.test_client(self) #tester nesne yanıtı = tester.get("/") durum kodu = yanıt. status_code self.assertEqual(statuscode, 200) #içerik dönüşünün uygulama olup olmadığını kontrol edin JSON def test_index_content(self): tester = app.test_client(self) yanıtı = tester.get("/") self.assertEqual(response.content_type, "application/json") #döndürülen Verileri kontrol edin def test_index_data(self): tester = app.test_client(self) answer = tester.get("/") self.assertTrue(b'Message' in response.data) if __name__ == '__main__': birimtest.ana()

Bu nedenle, temel olarak ayrıntılı bir şekilde web kazıma yaptıysanız, 200 yanıt kodu, belirli bir URL'ye olan isteğinizin başarıyla yapıldığı anlamına gelir ve bu da bir yanıt döndürür. İkincisi, yönetici tarafından sağlanan ve biri talep ettiğinde uygun şekilde hurdaya çıkarılması gereken bir veri türüdür ve üçüncüsü, herhangi bir değişiklik yapılmadan gitmesi gereken mevcut tüm verilerdir.

Son Notlar

Acele etmek! Flask REST API'yi sıfırdan oluşturmayı ve bakımını kolay ve güvenli bir şekilde öğrendik. REST API'leri farklı türdedir ve başka amaçlar için kullanılır. API'lerle yönlendirmeyi, ayrı bir dosyada bir işlev oluşturmak ve onu ana Uygulama kullanım senaryosu ile bir dekoratör olarak kullanmak gibi kullanabilirsiniz. Yani hepsi bu yazı içindi. Umarım her başlığı yakalamak kolay olmuştur ve herhangi bir sorunuz varsa, bunları aşağıdaki yorum bölümüne göndermekten veya benimle bağlantı kurmaktan çekinmeyin.

Resim Kaynağı - Orta

Benimle bağlan Linkedin

Diğer makalelerime göz atın okuyun ve üzerinde çılgın teknisyen

Vakit ayırdığınız için teşekkürler!

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

Kaynak: https://www.analyticsvidhya.com/blog/2022/01/rest-api-with-python-and-flask/

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?