Bir API'yi akıllı yapan nedir?

Jan 01 2023
Neredeyse 3-4 yıldır Makine Öğrenimi uyguluyorum. Bu süre zarfında pek çok model eğittim, birçok veri ardışık düzenini uyguladım ve çok daha fazlasını yaptım.

Neredeyse 3-4 yıldır Makine Öğrenimi uyguluyorum. Bu süre zarfında pek çok model eğittim, birçok veri ardışık düzenini uyguladım ve çok daha fazlasını yaptım. Not: Kesinlikle inşa etmem gereken model sayısından çok daha fazla veri topladım ve temizledim .

Makine öğrenimi yelpazesinde olmanın en önemli yönlerinden biri, düşüncelerinizi veya uygulamalarınızı başkaları tarafından kolayca kullanılabilir hale getirebilmektir .

Bunu açıklayayım.

Teknik olmayan bir kişiye bir algoritmanın meslekten olmayan terimlerle nasıl çalıştığını, modellerinizi bir API'de nasıl sunacağınızı açıklamak veya hatta projelerinize yeni başlayan birisinin yaptığınız işlerden kolayca haberdar olabilmesi için çalışmanızı belgelemek olabilir. uzak ve çok daha fazlası. Bu yazımızda API'lere odaklanacağız .

API (Application Programming Interface), kaynak ile son kullanıcı arasındaki iletişimi kolaylaştıran bir ortamdan başka bir şey değildir . Günlük hayatımızda kullandığımız uygulamaların neredeyse tamamı, uygulamayı kolaylıkla kullanabilmeniz için arka uçta ağır işler yapan 100'lerce (hatta daha fazla) API'den oluşur. Bir API, istek-yanıt şeklinde davranır . Bu, birkaç milisaniye ile birkaç dakika arasında değişebilir.

Unsplash'ta Balázs Kétyi'nin fotoğrafı

O çok uzun toplantıya katılmak üzereyken Starbucks'a gittiğinizi ve ekstra kremalı Karamelli Frappuccino (Kişisel favorim ) sipariş ettiğinizi hayal edin.

Sonra ne olur? İyi,

Muhtemelen siparişinizin verilmesi için sonraki 4-5 dakikayı beklersiniz , ardından mutfakta hazırlanır ve garson lezzetli Frappuccino'nuzu size getirir. Bu durumda son kullanıcı sizsiniz , mutfak kaynak oluyor ve Frappuccino'yu mutfaktan size getiren garson API görevi görüyor .

Yeterince net geliyor mu?

Şimdi 30 dakikadan fazla zaman geçtiğini ve Frappuccino'nuzun size henüz verilmediğini varsayalım. sabrını yitirmeyecek misin? Ya da en azından 10 dakika içinde yaptığınız o toplantıya katılmak için tüm bu sırada büyük bir hayal kırıklığına uğramaz mıydınız?

Unsplash'ta Christian Erfurt'un fotoğrafı

Yanıtı döndürmek için çok fazla gecikme olursa, uygulamanızın son kullanıcısı tam olarak böyle hisseder. Mükemmel Uygulamayı tasarlama söz konusu olduğunda gecikme çok önemlidir.

Şimdi en iyi kahve sanatçısının bile karamelli bir Frappuccino hazırlamasının 30 dakikadan az süreceğini varsayalım. Yine de Frappuccino sipariş eder misiniz yoksa daha kısa hazırlık süresi olan alternatif bir seçenek mi tercih edersiniz? Çoğu durumda, alternatif seçeneği tercih edeceksiniz, değil mi?

Ama ya barista alıntıladığım gibi, " Sadece o toplantıya git, ben gelmeden önce Frappuccino'nun konferans odanda olmasını sağlayacağım" derse?

Kulağa ilginç bir anlaşma gibi geliyor değil mi?

Neden aynı şekilde davranabilecek bir API oluşturamıyoruz?

Açıklamama izin ver.

Kullanıcı bir API'ye istek gönderdiğinde anında yanıt döndürecek bir API oluşturabilirsiniz. Ancak ağır işler arka planda yapılır ( bu biraz zaman alabilir/almayabilir ). Böyle bir API ile yürütme süresinin, yanıt döndürmek için harcanan toplam süreyi asla etkilememesini sağlayabilirsiniz.

Kereviz ve FastAPI , optimize edilmiş mesajlaşma mekanizması sağlar. Bu yazıda, aynı zamanda kişisel favorim python API çerçevesi olan FastAPI'ye (bu GEM'i yarattığı için Sebastián Ramírez'e sesleniyorum) odaklanacağız. Şu anda tartıştığımız şeyle mükemmel bir şekilde uyumlu olan Arka Plan görevini destekler.

FastAPI'de yeniyseniz, bu makalede açıklamak üzere olduğum şeyi anlamak için hızlı bir başlangıç ​​yapmak için lütfen FastAPI hakkındaki bu bloga bakın.

FastAPI'ye Başlarken

Buradan, FastAPI kullanarak temel bir API oluşturmayı bildiğinizi varsayacağım.

Başlayalım mı?

10 saniye sonra “Merhaba dünya” döndürecek bir API oluşturalım.

from fastapi import FastAPI
import time

app = FastAPI()

@app.post("/myApp/timer")
def read_item():
    
    start = time.time() # start time
    time.sleep(10)
    end = time.time() # end time
    
    print(end - start) # print the time taken to return the response
    
    return {"response": "Hello world!"}

swagger'dan gelen cevap

API yanıtının 10.0037 saniye sonra döndürüldüğünü ve print deyiminin de yaklaşık aynı zamanda olduğunu fark edebilirsiniz.

terminalden yanıt

Yaptığım 10 API çağrısı için geçen süre aşağıdadır

Alınan ortalama süre yaklaşık 10.002 saniyedir.

Şimdi aynı API'ye arka plan görevlendirme yeteneği ekleyelim. Bunu yapmak için FastAPI'deki Arka plan görevleri özelliğini kullanabilirsiniz. Sadece "Merhaba dünya!" yazdıran return_response adlı bir işlev oluşturun. çağrıldığında. API içindeki BackgroundTasks yöntemini kullanarak bu işlevi çağırın ve bu kadar!

from fastapi import BackgroundTasks, FastAPI
import time

app = FastAPI()

def return_response():
    start = time.time() # start time
    time.sleep(10)
    end = time.time() # end time
    
    print({
        "response": "Hello world!", 
        "time_taken": end - start
        })

@app.post("/myApp/timer")
def read_item(background_tasks: BackgroundTasks):
    start = time.time() # start time
    background_tasks.add_task(return_response) # background processing the function
    end = time.time() # end time
    
    return {
        "status": "processing in background",
        "time_taken": end - start
        }

swagger'dan gelen cevap

Print ifadesi ise 10 saniye sonra terminalde görülebilir.

terminalden yanıt

Burada, API'nin yanıtı döndürmek için harcadığı sürenin 10.002s'den yalnızca 0.00034s'ye düştüğünü , print ifadesinin ise 10.0043s sonra verildiğini görebilirsiniz.

Bu şekilde bir API oluşturmak, arka planda gerçekleşecek ağır işleri taşıyarak yanıtınızın neredeyse anında verilmesini sağlar.

Arka PlanGörevleri özelliğinin yalnızca uygulamanızın API yanıtını harici bir kaynakta (MySQL, DynamoDB vb.) depolayabildiği durumlarda en iyi şekilde çalışacağını ve yanıtı alırken son kullanıcının bunu görüntülemesini gerektirmediğini unutmayın.

Umarım bu, API'nizi çok daha kısa işlem süresiyle yeniden yapılandırmanıza yardımcı olur. Yakında daha ilginç yazılarla görüşmek üzere.