Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Αναστάσιος Δημανίδης

95 views

Published on

Ανάπτυξη RESTful APIs με τη χρήση της γλώσσας Gherkin και του OpenApi Specification

Published in: Education
  • Be the first to comment

  • Be the first to like this

Αναστάσιος Δημανίδης

  1. 1. Ανάπτυξη RESTful APIs με τη χρήση της γλώσσας Gherkin και του OpenAPI Specification Επιβλέποντες: Επικ. Καθηγ. κ. Συμεωνίδης Ανδρέας Μεταδιδακτορικός ερευνητής κ. Χατζηδημητρίου Κυριάκος Intelligent Systems and Software Engineering Labgroup Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Ηλεκτρονικών Υπολογιστών Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Διπλωματικός φοιτητής: Δημανίδης Αναστάσιος
  2. 2. Αντικείμενο • Τεχνολογία Λογισμικού • Στάδιο Λειτουργικών Απαιτήσεων • Συστήματα Παγκόσμιου Ιστού 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 2
  3. 3. The Web As An Application Platform In The Scale Of Decades: REST • Hypermedia controls - HATEOAS • Media types • Χρησιμοποιείται για σχεδίαση Web APIs 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 3
  4. 4. OpenAPI Specification • Τα REST APIs έχουν κοινά χαρακτηριστικά • Τυποποίηση κοινών χαρακτηριστικών: OpenAPI Specification • Machine-readable • Αυτόματη παραγωγή του κώδικα server, client και του documentation 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 4
  5. 5. OpenAPI Specification 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 5
  6. 6. Agile manifesto & Behavior-Driven Software Development 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 6
  7. 7. Gherkin: H γλώσσα του BDD 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 7 Feature: Attempt withdrawal using stolen card Scenario: Attempt withdrawal using stolen card Given I have $100 in my account And my card is invalid When I request $50 Then my card should not be returned And I should be told to contact the bank
  8. 8. Στόχοι • Αν θέλουμε το REST Web API περιγράφεται σε Gherkin • Αν θέλουμε το REST Web API να τυποποιείται κατά OpenAPI Specification • Μπορούμε να πάμε από την Gherkin στο OpenAPI Specification? • Αν ναι, πώς; • Πρέπει να σχεδιάσουμε μία απεικόνιση του OpenAPI Specification σε Gherkin • Πρέπει να αναπτύξουμε έναν μετατροπέα 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 8
  9. 9. Natural Language Processing • Η απαραίτητη γέφυρα • Πώς η μηχανή θα καταλάβει τον άνθρωπο • Information Extraction – tokenization & POS tagging • Regex, world lists 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 9
  10. 10. Απαιτήσεις Συνολικού Συστήματος • REST-aware • Agile-friendly • OAS-aware • fast • Functional requirements oriented • Possible to develop 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 10
  11. 11. Απεικόνιση απαιτήσεων RESTful APIs σε Gherkin: Resource Driven Development 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 11 Feature: <resource functionality description> Background: Given <optional resource dependency> And <optional role> Scenario: <resource state description> <scenario description> #Descriptive comment Given <optional role> When <mandatory action with domain details> And <optionally more domain details> |<domain>| <domain example>| <domain limits>| <domain description> | Then <optional domain results> And <optional protocol transitions> And <optional descriptive message>
  12. 12. HTTP ρήματα 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 12 When <action with verb> When I register a new client
  13. 13. Παράμετροι: Θέση 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 13 When <action with optional parameters> And <more optional parameters> |and some optional table parameters| Verb Path Query Body GET   POST  PUT    DELETE  
  14. 14. Παράμετροι: Τύποι, formats, όρια 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 14 Name Example Description/limits Description/limits |product name | ‘Chair’ | 'Made in Finland‘ | | |on sale | false | | | |cost | 149.99 | Cost of product | Can’t be less then 0| Από το παράδειγμα βγαίνει ο τύπος και το format. Υποστηριζόμενοι τύποι και formats: • Integer: int32 • Number: float • String: plain, date, date-time, password • Boolean • Array • File Το ίδιο το παράδειγμα αποθηκεύεται ως documentation
  15. 15. <step description>: | model | When I add a new product: | name | ‘Chair’ | | description | 'Made in Finland' | | color | 'brown' | | category | 'furniture' | | on sale | false | | available in | 48 | #hours | shipping | 'worldwide' | | doa | 7 | # days | id | 45 | | cost | 15000.1 | # € 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 15 Παράμετροι: Models
  16. 16. Παράμετροι: Required ή όχι Required θεωρούνται οι παράμετροι που εμφανίζονται σε όλα τα ίδια requests/actions και σε όλα τα ίδια responses 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 16
  17. 17. HATEOAS Links Then <operation> <resource> And <operation> <resource> Then I should be prompted to submit a payment And I have the option to review the order And I have the option to cancel the order And I have the option to update the order 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 17
  18. 18. HTTP Status Codes Then/And <step description with ‘message’> Then I should see "List deleted successfully" 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 18
  19. 19. Path Hierarchies Background: Given <parameter of other resource> + <resource name> Background: Given the id of an unpaid order 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 19
  20. 20. Roles Given <role name> Given I am logged in as administrator 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 20
  21. 21. Μετατροπή Απαιτήσεων από Gherkin σε OpenAPI Specification: Gherkin2OAS • Το λογισμικό γράφτηκε σε python 3.5 • Βασική λειτουργία: παίρνει ως είσοδο resource files γραμμένα κατά RDD και δίνει ως έξοδο το OpenAPI Specification 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 21
  22. 22. Gherkin2OAS: Κανονικό μοντέλο λειτουργίας 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 22
  23. 23. Gherkin2OAS: Εναλλακτικό Μοντέλο Λειτουργίας 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 23
  24. 24. OpenAPI Specification Version 2 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 24 • Swagger Object • Info Object • Contact Object • License Object • Paths Object • Path Item Object • Operation Object • External Documentation Object • Parameter Object • Items Object • Responses Object • Response Object • Headers Object • Example Object • Header Object • Tag Object • Reference Object • Schema Object • XML Object • Definitions Object • Parameters Definitions Object • Responses Definitions Object • Security Definitions Object • Security Scheme Object • Scopes Object • Security Requirement Object
  25. 25. Απεικόνιση REST API με γράφους: • Γράφος μεταβάσεων σε επίπεδο πόρων • Γράφος μεταβάσεων σε επίπεδο σεναρίων 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 25
  26. 26. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 26
  27. 27. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 27
  28. 28. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 28
  29. 29. Συμπερασματικά • Η πρόκληση ήταν να απεικονιστεί μία τεχνική φιλοσοφία – REST & OAS – σε φυσική γλώσσα, ευανάγνωστη από τον άνθρωπο • Το πρόβλημα δεν λύνεται, αλλά αντιμετωπίζεται σχεδιαστικά • Η αξιολόγηση του συστήματος συνδέεται με την ευχρηστία και όχι με accuracy και σχετικά scores • Η αξιοπιστία του συστήματος συνδέεται με την τήρηση των κανόνων 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 29
  30. 30. Γνώσεις που αποκτήθηκαν • System design • REST, BDD, TDD, NLP • Τεχνολογία λογισμικού, Παγκόσμιος Ιστός • APIs, OpenAPI Specification • Python • εμπειρία Tech Talk • minor: εμπειρία Latex 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 30
  31. 31. Σας ευχαριστώ 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 31
  32. 32. UI 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 32
  33. 33. OpenAPI Specification V3 1. Rearranged the structure of the specification for easier and extended reusability. 2. Extended JSON Schema support to include ‘oneOf‘, ‘anyOf‘ and ‘not‘ support. 3. Changed the structure of parameters to allow the use of schema in them. 4. Added support for Cookie parameters and eliminated dataForm parameters. 5. Body parameters were extracted to their own entity. 6. Added support for content type negotiation. 7. Introduced a new format to allow static linking between responses and future requests. 8. Simplified and enhanced security definitions of APIs. 9. Added a callback mechanism to describe WebHooks. Από αυτές τις αλλαγές σχολιάζουμε ότι: • Το OpenAPI Specification θα υποστηρίζει HATEOAS (7) • Η αφαίρεση των παραμέτρων τύπου dataForm και η αντιμετώπιση των body παραμέτρων ως ξεχωριστές οντότητες (4), (5), απλοποιούν το έργο του Formatter. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 33
  34. 34. Preprocessor model 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 34
  35. 35. NLP model 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 35
  36. 36. Path Hierarchies Model 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 36
  37. 37. HATEOAS Model 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 37
  38. 38. State Model 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου OpenAPISpecification 38
  39. 39. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 39
  40. 40. 17/03/2017 ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι τουOpenAPISpecification 40

×