1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        BeckettPython的HTTP API客戶端

        聯合創(chuàng)作 · 2023-09-29 08:01

        Beckett是一個基于慣例的(convention-based)框架,是為了建設HTTP APIs的 Python接口。

        因為它是基于慣例的,它不需要使用魔法就能用語HTTP APIs,像REST風格的URI和資源一樣。

        資源被聲明為Python類,像這樣: 

        # resources.py
        from beckett.resources import BaseResource
        
        
        class Product(BaseResource):  
            class Meta:
                name = 'Product'
                identifier = 'slug'
                attributes = (
                    'slug',
                    'brand',
                    'price',
                    'images',
                )
                valid_status_codes = (
                    200,
                    201,
                )
                methods = (
                    'get',
                    'post',
                )

        然后你用客戶端獲取你要的資源并進行記錄:

        # client.py
        from beckett.clients import BaseClient  
        from .resources import Product
        
        class MyClient(BaseClient):  
            class Meta:
                name = 'My API Client'
                base_url = 'https://myapi.com/api/'
                resources = (
                    Product,
                )

        就是這樣,這就是你需要做的所有事。

        Beckett會在客戶端使用 reflection產生python方法,用于與注冊資源交互:

        from .clients import MyClient  
        client = MyClient()  
        client.get_product(uid='product-slug')  
        >>> <Product | product-slug>

        這些方法產生URI結構來匹配restful風格的URIs:

        uri-structures

        客戶端的響應是資源類的類型實例,所有你定義的屬性將從JSON響應中提取,并作為屬性添加在實例中:

        resource = clients.get_product(uid='some-slug')[0]  
        type(resource)  
        >>> <class 'resources.Product'>
        resource.name  
        >>> 'Handbag'

        靈活性

        因為過并不是所有的API都是一樣的,Beckett被設計得很靈活,允許你修改它工作方式的各個方面:

          • URI生成

          • 分頁響應渲染

          • 請求頭和請求會話

          • 安全認證

        舉個例子,如果你需要修改我們的產品資源使其與我前面提到的唯一的URI協(xié)同工作, 我們可以子類化我們資源中的get_url方法

        class Product(BaseResource):  
            class Meta:
                ...
        
            @classmethod
            def get_url(cls, url, uid, **kwargs):
                return '{}/products/?id={}&country={}'.format(
                    url,
                    uid,
                    kwargs.get('country')
                )

        這個方法利用了繼承的優(yōu)勢,從而比串行化語言能夠提供更多的靈活性。

        超媒體

        Beckett能夠理解超媒體,并幫助你遍歷API的相關資源。如果我們的Product 資源和Designers有關,我們可以在我們的代碼中使用HypermediaResource基類進行聲明,它將檢查和理解超媒體鏈接:

        class Designer(HypermediaResource):  
            ...
        
        class Product(HypermediaResource):  
            class Meta:
                ...
                base_url = 'http://myapi.com/api'
                related_resources = (
                    Designer,
                )

        Beckett將檢查JSON響應數據,為Designer 資源匹配URL模式,并生成和它交互的方法:

        product = client.get_product(uid='some-slug')[0]  
        # Will raise an error if uid is not related
        product.get_designers(uid=4)  
        <Designer | Some Designer>

        誰正在使用Beckett

        如果沒有途徑測試它,我就不可能發(fā)布它。Beckett正在為 PokéAPI 和 SWAPI的Python用戶提供支持。它也已經在Lyst上測試過了,為我們最繁忙的API服務提供集成。這個內部API一天之內有超過十萬次的請求,并在最初的幾個版本的Beckett中幫助修復了一些bug。

        未來的計劃

        我現在的計劃是把Beckett一直作為一個開源的項目。我想它可以作為一個很好的例子,可以提供API客戶端是怎樣集成的,尤其是與超媒體概念協(xié)同工作的那些。

        目前Beckett可以對HTTP請求以及它所處理的HTTP響應對象提供靈活的控制。我想在未來提供更多的靈活性,但要做到這一點,我需要更多的特定領域的用例。

        最后。我希望你可以下載它并嘗試把它集成到你的項目中,然后給我提供一些如何改進它的反饋。

        瀏覽 12
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            密臀av夜夜澡人人爽人人 | 啪啪啪网站在线播放 | 成人免费无码毛片 | 日韩高清一区二区三区四区 | 国产精品亚洲欧美婷婷五月 | 亚洲精品一区二区三区四区五区 | 日本一級片黃色一級九抓直播 | 舔逼操逼视频 | 精品在线视频网 | 久久婷婷五月综合 |