graphql with python frameworks graphql with python
play

GraphQL with Python frameworks GraphQL with Python frameworks - PowerPoint PPT Presentation

27.09.2018 reveal.js GraphQL with Python frameworks GraphQL with Python frameworks Create next-generation API with ease Bartosz Kazua http://0.0.0.0:8080/?print-pdf 1/56 27.09.2018 reveal.js About About mua mua Frontend/Backend/Mobile


  1. 27.09.2018 reveal.js GraphQL with Python frameworks GraphQL with Python frameworks Create next-generation API with ease Bartosz Kazuła http://0.0.0.0:8080/?print-pdf 1/56

  2. 27.09.2018 reveal.js About About mua mua Frontend/Backend/Mobile developer Software architect Highly focused on new technologies http://0.0.0.0:8080/?print-pdf 2/56

  3. What is GraphQL? What is GraphQL? 27.09.2018 reveal.js A query language for your API http://0.0.0.0:8080/?print-pdf 3/56

  4. 27.09.2018 reveal.js How it works How it works http://0.0.0.0:8080/?print-pdf 4/56

  5. 27.09.2018 reveal.js How it works How it works Database http://0.0.0.0:8080/?print-pdf 5/56

  6. 27.09.2018 reveal.js How it works How it works Database REST API http://0.0.0.0:8080/?print-pdf 6/56

  7. 27.09.2018 reveal.js How it works How it works Database REST API Legacy API http://0.0.0.0:8080/?print-pdf 7/56

  8. 27.09.2018 reveal.js Is it production ready? Is it production ready? http://0.0.0.0:8080/?print-pdf 8/56

  9. 27.09.2018 reveal.js Data structures Data structures Schema Type Query Mutation http://0.0.0.0:8080/?print-pdf 9/56

  10. 27.09.2018 reveal.js Schema Schema type Schema { Entrypoint to API, defines queries and mutations that can be accessed via query: Query GraphQL mutation: Mutation } http://0.0.0.0:8080/?print-pdf 10/56

  11. 27.09.2018 reveal.js Type Type type Character { The most basic components of a GraphQL schema, which just represent a name: String! kind of object you can fetch from your appearsIn: [Episode]! service, and what fields it has } http://0.0.0.0:8080/?print-pdf 11/56

  12. 27.09.2018 reveal.js Query Query { Asking for fields and objects based on provided parameters. Here you can hero { define the shape of response. name } } http://0.0.0.0:8080/?print-pdf 12/56

  13. 27.09.2018 reveal.js Mutation Mutation The way to modify data. If the mutation field returns an object type, you can ask for nested fields. mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) { createReview(episode: $ep, review: $review) { stars commentary } } { "ep": "JEDI", "review": { "stars": 5, "commentary": "This is a great movie!" } } http://0.0.0.0:8080/?print-pdf 13/56

  14. 27.09.2018 reveal.js GraphiQL GraphiQL A graphical interactive in-browser GraphQL IDE for testing and writing queries. http://0.0.0.0:8080/?print-pdf 14/56

  15. 27.09.2018 reveal.js Graphene Graphene GraphQL in Python made easy GraphQL in Python made easy https://graphene-python.org/ pip install graphene http://0.0.0.0:8080/?print-pdf 15/56

  16. 27.09.2018 reveal.js Let's build some API Let's build some API Add user / get user / get all users Add blog post / get post / get all posts http://0.0.0.0:8080/?print-pdf 16/56

  17. 27.09.2018 reveal.js Django Django http://0.0.0.0:8080/?print-pdf 17/56

  18. 27.09.2018 reveal.js pip install graphene graphene-django http://0.0.0.0:8080/?print-pdf 18/56

  19. 27.09.2018 reveal.js pip install graphene graphene-django INSTALLED_APPS = ( # ... 'graphene_django', ) GRAPHENE = { 'SCHEMA': 'app.schema.schema' # Path to main schema } http://0.0.0.0:8080/?print-pdf 19/56

  20. 27.09.2018 reveal.js pip install graphene graphene-django INSTALLED_APPS = ( # ... 'graphene_django', ) GRAPHENE = { 'SCHEMA': 'app.schema.schema' # Path to main schema } from django.urls import path from graphene_django.views import GraphQLView urlpatterns = [ # ... path('graphql/', GraphQLView.as_view(graphiql=True)), ] http://0.0.0.0:8080/?print-pdf 20/56

  21. 27.09.2018 reveal.js User model User model class User(models.Model): name = models.CharField(max_length=20) surname = models.CharField(max_length=30) age = models.IntegerField() http://0.0.0.0:8080/?print-pdf 21/56

  22. 27.09.2018 reveal.js User model User model class User(models.Model): name = models.CharField(max_length=20) surname = models.CharField(max_length=30) age = models.IntegerField() UserType UserType from graphene_django import DjangoObjectType class UserType(DjangoObjectType): class Meta: model = User http://0.0.0.0:8080/?print-pdf 22/56

  23. 27.09.2018 reveal.js User Query User Query class UserQuery(graphene.ObjectType): users = graphene.List(UserType) def resolve_users(self, info): return User.objects.all() http://0.0.0.0:8080/?print-pdf 23/56

  24. 27.09.2018 reveal.js Schema Schema app/schema.py schema = graphene.Schema(query=UserQuery) http://0.0.0.0:8080/?print-pdf 24/56

  25. 27.09.2018 reveal.js http://0.0.0.0:8080/?print-pdf 25/56

  26. 27.09.2018 reveal.js Getting one user Getting one user class UserQuery(graphene.ObjectType): users = graphene.List(UserType) user = graphene.Field(UserType, name=graphene.String()) def resolve_users(self, info): return User.objects.all() def resolve_user(self, info, name): return User.objects.filter(name=name).first() http://0.0.0.0:8080/?print-pdf 26/56

  27. 27.09.2018 reveal.js Getting one user Getting one user class UserQuery(graphene.ObjectType): users = graphene.List(UserType) user = graphene.Field(UserType, name=graphene.String()) def resolve_users(self, info): return User.objects.all() def resolve_user(self, info, name): return User.objects.filter(name=name).first() http://0.0.0.0:8080/?print-pdf 27/56

  28. 27.09.2018 reveal.js Getting one user Getting one user class UserQuery(graphene.ObjectType): users = graphene.List(UserType) user = graphene.Field(UserType, name=graphene.String()) def resolve_users(self, info): return User.objects.all() def resolve_user(self, info, name): return User.objects.filter(name=name).first() http://0.0.0.0:8080/?print-pdf 28/56

  29. 27.09.2018 reveal.js http://0.0.0.0:8080/?print-pdf 29/56

  30. 27.09.2018 reveal.js User mutation User mutation http://0.0.0.0:8080/?print-pdf 30/56

  31. 27.09.2018 reveal.js Plain GraphQL mutation Plain GraphQL mutation class UserMutation(graphene.Mutation): user = graphene.Field(UserType) class Arguments: name = graphene.String() surname = graphene.String() age = graphene.Int() def mutate(self, info, **kwargs): user = User.objects.create(**kwargs) return UserMutation(user=user) http://0.0.0.0:8080/?print-pdf 31/56

  32. 27.09.2018 reveal.js Add mutation to the schema Add mutation to the schema class Mutations(graphene.ObjectType): create_user = UserMutation.Field() schema = graphene.Schema(query=UserQuery, mutation=Mutations) http://0.0.0.0:8080/?print-pdf 32/56

  33. 27.09.2018 reveal.js Add mutation to the schema Add mutation to the schema class Mutations(graphene.ObjectType): create_user = UserMutation.Field() schema = graphene.Schema(query=UserQuery, mutation=Mutations) http://0.0.0.0:8080/?print-pdf 33/56

  34. 27.09.2018 reveal.js http://0.0.0.0:8080/?print-pdf 34/56

  35. 27.09.2018 reveal.js Django Forms-based mutation Django Forms-based mutation class UserForm(forms.ModelForm): class Meta: model = User fields = ('name', 'surname', 'age') class UserMutation(DjangoModelFormMutation): class Meta: form_class = UserForm http://0.0.0.0:8080/?print-pdf 35/56

  36. 27.09.2018 reveal.js http://0.0.0.0:8080/?print-pdf 36/56

  37. 27.09.2018 reveal.js Django FAQ Django FAQ I use REST Framework - how to live? Take a look at graphene_django.rest_framework package. How to validate data? When using forms - use built-in validation. When going plain - add your own validator. How to receive user data? Use info.context variable passed to every function. http://0.0.0.0:8080/?print-pdf 37/56

  38. 27.09.2018 reveal.js GraphQL with Django GraphQL with Django Q&A Q&A http://0.0.0.0:8080/?print-pdf 38/56

  39. 27.09.2018 reveal.js Flask Flask http://0.0.0.0:8080/?print-pdf 39/56

  40. 27.09.2018 reveal.js Installation Installation pip install graphene graphene_sqlalchemy Flask-GraphQL app.add_url_rule( '/graphql', view_func=GraphQLView.as_view( 'graphql', schema=schema, graphiql=True ) ) http://0.0.0.0:8080/?print-pdf 40/56

  41. 27.09.2018 reveal.js Post model Post model class Post(Model): __tablename__ = 'posts' id = Column(Integer, primary_key=True) name = Column(String) intro = Column(Text) content = Column(Text) author = Column(String) http://0.0.0.0:8080/?print-pdf 41/56

  42. 27.09.2018 reveal.js Type and query Type and query class PostType(SQLAlchemyObjectType): class Meta: model = Post http://0.0.0.0:8080/?print-pdf 42/56

  43. 27.09.2018 reveal.js Type and query Type and query class PostType(SQLAlchemyObjectType): class Meta: model = Post class Query(graphene.ObjectType): posts = graphene.List(PostType) def resolve_posts(self, info): return Post.query.all() http://0.0.0.0:8080/?print-pdf 43/56

  44. 27.09.2018 reveal.js http://0.0.0.0:8080/?print-pdf 44/56

  45. 27.09.2018 reveal.js Get one post Get one post class Query(graphene.ObjectType): posts = graphene.List(PostType) post = graphene.Field(PostType, id=graphene.Int()) def resolve_posts(self, info): return Post.query.all() def resolve_post(self, info, id): return Post.query.get(id) http://0.0.0.0:8080/?print-pdf 45/56

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend