ΘΕΣΣΑΛΟΝΙΚΗ Η ΔΕΥΤΕΡΗ ΠΟΛΗ ΤΗΣ ΒΥΖΑΝΤΙΝΗΣ ΑΥΤΟΚΡΑΤΟΡΙΑΣ, ΔΑΝΑΗ ΠΑΝΟΥ
Αναστάσιος Δημανίδης
1. Ανάπτυξη RESTful APIs με τη χρήση της
γλώσσας Gherkin και του OpenAPI
Specification
Επιβλέποντες:
Επικ. Καθηγ. κ. Συμεωνίδης
Ανδρέας
Μεταδιδακτορικός ερευνητής
κ. Χατζηδημητρίου Κυριάκος
Intelligent Systems and Software Engineering Labgroup
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Ηλεκτρονικών Υπολογιστών
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Διπλωματικός φοιτητής:
Δημανίδης Αναστάσιος
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. OpenAPI
Specification
• Τα REST APIs έχουν κοινά χαρακτηριστικά
• Τυποποίηση κοινών χαρακτηριστικών: OpenAPI
Specification
• Machine-readable
• Αυτόματη παραγωγή του κώδικα server, client
και του documentation
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου
OpenAPISpecification
4
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. Στόχοι
• Αν θέλουμε το REST Web API περιγράφεται σε Gherkin
• Αν θέλουμε το REST Web API να τυποποιείται κατά OpenAPI Specification
• Μπορούμε να πάμε από την Gherkin στο OpenAPI Specification?
• Αν ναι, πώς;
• Πρέπει να σχεδιάσουμε μία απεικόνιση του OpenAPI Specification σε Gherkin
• Πρέπει να αναπτύξουμε έναν μετατροπέα
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι
τουOpenAPISpecification
8
9. Natural Language
Processing
• Η απαραίτητη γέφυρα
• Πώς η μηχανή θα καταλάβει τον άνθρωπο
• Information Extraction – tokenization & POS
tagging
• Regex, world lists
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου
OpenAPISpecification
9
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. <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. Παράμετροι:
Required ή όχι
Required θεωρούνται οι παράμετροι που
εμφανίζονται σε όλα τα ίδια
requests/actions και σε όλα τα ίδια
responses
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου
OpenAPISpecification
16
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. HTTP Status
Codes
Then/And <step description with
‘message’>
Then I should see "List deleted
successfully"
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου
OpenAPISpecification
18
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. Roles
Given <role name>
Given I am logged in as administrator
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαιτου
OpenAPISpecification
20
21. Μετατροπή Απαιτήσεων από Gherkin σε
OpenAPI Specification: Gherkin2OAS
• Το λογισμικό γράφτηκε σε python 3.5
• Βασική λειτουργία: παίρνει ως είσοδο resource files γραμμένα κατά RDD και δίνει ως
έξοδο το OpenAPI Specification
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι
τουOpenAPISpecification
21
25. Απεικόνιση REST API με γράφους:
• Γράφος μεταβάσεων σε επίπεδο πόρων
• Γράφος μεταβάσεων σε επίπεδο σεναρίων
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι
τουOpenAPISpecification
25
29. Συμπερασματικά
• Η πρόκληση ήταν να απεικονιστεί μία τεχνική φιλοσοφία – REST & OAS – σε φυσική
γλώσσα, ευανάγνωστη από τον άνθρωπο
• Το πρόβλημα δεν λύνεται, αλλά αντιμετωπίζεται σχεδιαστικά
• Η αξιολόγηση του συστήματος συνδέεται με την ευχρηστία και όχι με accuracy και
σχετικά scores
• Η αξιοπιστία του συστήματος συνδέεται με την τήρηση των κανόνων
17/03/2017
ΑνάπτυξηRESTfulAPIsμετηχρήσητηςγλώσσαςGherkinκαι
τουOpenAPISpecification
29
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