当前位置:网站首页>Yyds Dry Inventory # RPC, rest, graphql interface type Overview

Yyds Dry Inventory # RPC, rest, graphql interface type Overview

2021-11-25 18:01:07 Testez le maïs.

Bonjour tout le monde,Je suis maijun,Cet article décrit les types d'interfaces séparémentRPC、REST、GraphQL

1. Le sens de l'interface

API(Application Programming Interface):Interface de programmation d'application, Abréviations“Interface”.

Exemples:

  • Si le programme a créé un thread,Besoin d'appeler le système d'exploitation“Interface”
  • Lors du shopping,Si vous voulez vider votre panier,Appeler le système de commerce électronique“Interface”
  • Il y a une procédure,Pour transmettre des données à un autre programme,Il faut l'appeler“Interface”

Interface:La méthode de communication convenue entre les programmes

Caractéristiques:Méthode d'appel convenue,Et le comportement attendu,Mais pas de détails

Le sens:Les programmes peuvent être découplés,Est - ce qu'il y a un lien

Les interfaces sont importantes,Les tests d'interface sont également très nécessaires.

#yydsInventaire des marchandises sèches# RPC、REST、GraphQLAperçu du type d'interface_Essais d'interface

Faible difficulté de test d'interface,Les gains sont importants,Numéro de l'effet, Les tests d'interface sont nécessaires

Pour un système , Si nous voulons des tests de haute qualité à faible coût , Choix prioritaire pour les essais d'interface .

2. Type d'interface

Interface au niveau de l'application :

  • RPC
  • REST
  • GraphQL

2.1 RPC

PRC (remote procedure call ) Appel de procédure à distance, D'autres programmes 、Système、Fonctions du logiciel(Fonctions) La fonction de ce programme ,Utilisation

Par exemple,:

ProcédureAIl y a une fonctionadd, Réaliser la fonction d'addition

ProcédureBJe veux utiliseradd,Besoins etACommunication.

CréationAPI: AEtBAccord,Le cas échéantBPasserxxxxx ÀA,AlorsAC'est exact.xxxxTraitement,Et renvoie les résultatsyyyyVoilà.B,

RPCUtilisation: InBAppel direct moyenadd

gRPC Haute performance développée par Google ,TranslinguePRCComponents

Utiliser les étapes:

  1. Définir le format des données :pb
  2. UtilisationgrpcComponents, Produit selon le format des données pythonCode
  3. Démarrageserver (Propriétéadd ProcéduresA)
  4. Démarrageclient,AppelezserverMéthodes

  1. Installer les outils associés

    pip install grpcio  grpcio-tools
    
           
    • 1.
  2. Définir le format des données

     https://developers.google.com/protocol-buffers/docs/overview

    //  yumi.proto
    syntax = "proto3";
    
    service Yumi{
        rpc add(Request) returns (Response) {} ;
    
    }
    
    message Request {
      int32 a = 1;
      int32 b = 2;
    }
    
    message Response {
      int32 c = 3;
    }
    
           
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
  3. GénérerpythonDocumentation

    python -m grpc.tools.protoc   --python_out=. --grpc_python_out=. -I. sanmu.proto
    
           
    • 1.
    sanmu.proto  # Accord(Format des données)
    sanmu_pb2.py  # python Version du Protocole 
    sanmu_pb2_grpc.py # pythonDegrpc (server Etclient)
    
           
    • 1.
    • 2.
    • 3.
  4. Démarrageserver

    
    from concurrent import futures
    
    import grpc
    
    import sanmu_pb2
    import sanmu_pb2_grpc
    
    
    class Sanmu(sanmu_pb2_grpc.SanmuServicer):
        def add(self, request, context):
            a, b = request.a, request.b
            print(f"{a=}, {b=}")
    
            c = a + b
            return sanmu_pb2.Response(c=c)
    
    
    def serve():
        server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
        sanmu_pb2_grpc.add_SanmuServicer_to_server(Sanmu(), server)
        server.add_insecure_port("[::]:50051")
        server.start()
        server.wait_for_termination()
    
    
    if __name__ == "__main__":
        serve()
    
           
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
  5. Démarrageclient

    import grpc
    
    import sanmu_pb2
    import sanmu_pb2_grpc
    
    
    def add(a: int, b: int) -> int:
        # Connectez - vous àrpcServeur
        channel = grpc.insecure_channel("[::1]:50051")
        # Appelez add Services
        stub = sanmu_pb2_grpc.SanmuStub(channel)
        response = stub.add(sanmu_pb2.Request(a=a, b=b))
    
        return response.c
    
    
    print(add(1, 2))
    
    
           
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.

RPCCaractéristiques:

  1. Oui.serveFin etclientFin,Génération automatique
  2. Je ne sais pas.PRC Détails de la communication

C'est exact.RPCEffectuer des tests, Il suffit d'avoir RPCClient, Puis appelez - le

2.2 REST

RESTCe mot,- Oui. Roy Thomas FieldingÀ lui.2000Année  Thèse de doctorat Proposé dans.

Fielding Pour mettre ses principes architecturaux sur les logiciels Internet ,Ça s'appelleREST,C'est - à - dire:Representational State TransferAbréviation de. Ma traduction de cette phrase est "Transition de l'état de la couche de présentation".

Si un schéma correspondRESTPrincipes,C'est ce qu'on appelleRESTfulArchitecture.

​ ——《 Compris.RESTfulArchitecture - Le blog de Nguyen Yifeng (ruanyifeng.com)

REST :Architecture logicielle

RESTful :Oui.RESTStyle

RESTful API: Oui.RESTStyle API

REST Et RPCC'est le contraire.:REST Aucun client indépendant dédié n'est disponible , Au lieu de cela, vous devez connaître les détails de l'accord .

Parce que REST【Suffisant】UtiliserHTTPSémantique, Pour décrire les ressources Et le fonctionnement des ressources :

  1. Utiliser URL Représentation Ressources
  2. Utiliser METHOD Représente l'action sur la ressource (GET POST)
  3. Utiliser STATUS_CODE Représente le résultat de l'opération

D'abord.HTTP,Derrière.REST,RESTfulC'est un style., Pas d'exigences et de contraintes spécifiques , Il y a donc de grandes différences dans l'implémentation concrète de l'interface .

  1. Format des données:
    1. json
    2. xml
    3. Formulaire
    4. raw
  2. Méthode de demande:
    1. Diversmethod
    2. Je l'utilise.POST
  3. Mode d'authentification:
    1. cookies
    2. basic auth
    3. api-key
    4. jwt (json web token)
    5. OAuth 2.0

Pour une interface unifiée Restful APIDétails, Spécification de l'interface de lancement de l'industrie OAS (OpenAPI Specification)

swagger 2.0

openapi 3.0

swagger - Oui.APICollection d'outils:

  • Outils de conception d'interface
  • Outils de documentation d'interface
  • Outil de génération de code d'interface

De3.0C'est parti., La spécification d'interface a contribué à OASOrganisation.

2.3 GraphQL

GraphQL Est plus puissant et plus avancé , Un type d'interface plus flexible , Plus précisément, c'est un langage de requête .

GraphQLEst également basé surHTTPAccord,Mais avecRESTAu contraire.:

  • Juste un.URL
  • Juste un.METHOD
  • Tous les paramètres sont placés dans bodyMoyenne

Ce paramètre est en fait une syntaxe de requête , Vous pouvez écrire des déclarations de requête pour les passifs , Obtenir toutes les données nécessaires à partir de l'interface en même temps .

VS REST:

  1. Demander la classification des produits
  2. Selon la classification des marchandises , Interrogation de la liste des produits
  3. Selon la marchandiseID, Rechercher les prix des produits de base

Par exemple,:

POST  https://demo.saleor.io/graphql/

POST  https://demo.saleor.io/graphql/


GITHUB API V3: REST

GITHUB API V4: GraphQL

3. Idées d'essai pour l'automatisation des interfaces

#yydsInventaire des marchandises sèches# RPC、REST、GraphQLAperçu du type d'interface_python_02

版权声明
本文为[Testez le maïs.]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/11/20211125174940966t.html

随机推荐