Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
API Blueprint
Search
Dmitry Efimov
September 07, 2016
Programming
89
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
API Blueprint
Tools
Dmitry Efimov
September 07, 2016
More Decks by Dmitry Efimov
See All by Dmitry Efimov
Автоматизируем синхронизацию HTTP API и документации
tuwilof
0
52
Автоматизация Document-Driven Development для проектов с большим API
tuwilof
0
52
Инструменты для обнаружения рассинхронизации реализации “REST” API от документации
tuwilof
0
58
Валидация “REST” API по документации APIB
tuwilof
0
51
Негативное тестирование “REST” API и защита от него
tuwilof
0
350
Ликбез по JSON
tuwilof
0
94
Документирование API
tuwilof
0
200
Почему и как заменить все id на UUID
tuwilof
0
110
Authentication in rails. Monolith vs SPA
tuwilof
0
220
Other Decks in Programming
See All in Programming
golang-bob.pdf
iwatsukayura
0
130
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
250
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
210
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Agile that works and the tools we love
rasmusluckow
331
22k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Mobile First: as difficult as doing things right
swwweet
225
10k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
Music & Morning Musume
bryan
48
7.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
API Blueprint
типичная документация по API = route + json
типичная документация на API Blueprint = AST Markdown + MSON
JSON-SCHEMA
Рассмотрим на примере самого простого микросервиса
требуемый функционал Request: curl -v -X GET http://localhost:3000/status Response: <
HTTP/1.1 200 OK
документация API = route + json
исходный текст в API Blueprint # Микросервис ## Статус [/status]
### Проверить [GET] Узнать статус микросервиса + Request + Response 200
Tools • Editors •Parsers •Renders •Testing •Mock servers •Others
apiary.io
apiary.io
apiary.io
Atom editor language
Vim, Emacs, Visual Studio Code
Tools •Editors • Parsers •Renders •Testing •Mock servers •Others
Drafter drafter doc.apib (default YAML) element: "parseResult" content: - element:
"category" meta: classes: - "api" title: "Микросервис" content: - element: "category" meta: classes: - "resourceGroup" title: "" content: - element: "resource" meta: title: "Статус" attributes: href: "/status" content: - element: "transition" meta: title: "Проверить" content: - element: "copy" content: "Узнать статус микросервиса\n" - element: "httpTransaction" content: - element: "httpRequest" attributes: method: "GET" content: [] - element: "httpResponse" attributes: statusCode: "200" content: [] - element: "annotation" meta: classes: - "warning" attributes: code: 6 sourceMap: - element: "sourceMap" content: - - 81 - 10 content: "empty request message-body" OK. warning: (6) empty request message-body :81:10
drafter doc.apib --format json {"element"=>"parseResult", "content"=>[{"element"=>"category", "meta"=>{"classes"=>["api"], "title"=>"Микросервис"}, "content"=>[{"element"=>"category", "meta"=>{"classes"=>["resourceGroup"],
"title"=>""}, "content"=>[{"element"=>"resource", "meta"=>{"title"=>"Статус"}, "attributes"=>{"href"=>"/status"}, "content"=>[{"element"=>"transition", "meta"=>{"title"=>"Проверить"}, "content"=>[{"element"=>"copy", "content"=>"Узнать статус микросервиса\n"}, {"element"=>"httpTransaction", "content"=>[{"element"=>"httpRequest", "attributes"=>{"method"=>"GET"}, "content"=>[]}, {"element"=>"httpResponse", "attributes"=>{"statusCode"=>"200"}, "content"=>[]}]}]}]}]}]}, {"element"=>"annotation", "meta"=>{"classes"=>["warning"]}, "attributes"=>{"code"=>6, "sourceMap"=>[{"element"=>"sourceMap", "content"=>[[81, 10]]}]}, "content"=>"empty request message-body”}]} OK. warning: (6) empty request message-body :81:10
gem redsnow
Tools •Editors •Parsers • Renders •Testing •Mock servers •Others
любой Markdown preview
Aglio aglio -i doc.apib -s (default localtosh:3000)
Aglio aglio -i doc.apib -s --theme-template triple (default localtosh:3000)
Aglio aglio -i doc.apib -s --theme-variables slate (default localtosh:3000)
Iglo(go), Atom preview
Tools •Editors •Parsers •Renders • Testing •Mock servers •Others
Dredd если на самом деле есть приложение и документация на
него, и хочется проверить только один первый ответ в документации для каждого запроса который обязательно не возвращает тело dredd doc.apib http://localhost:3000
Dredd
Dredd
где пригодятся такие авто тесты?
Tools •Editors •Parsers •Renders •Testing • Mock servers •Others
Drakov если хочется сделать мок сервер для запросов которые не
отправляют тело запроса и возвращают код ответа без тела ответа drakov -f doc.apib curl -v -X GET http://localhost:3000/status
Drakov
Можно “натравить” dredd на drakov используя одну и туже документацию
и они оба отработают корректно (если документация валидна)
gem apib-mock_server
зачем нужны такие mock сервера?
Tools •Editors •Parsers •Renders •Testing •Mock servers • Others
Ни один инструмент не использует MSON(и даже просто JSON) (не
считая парсер и превью)
Middleware валидация
конец