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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
APNsからLive Activityを開始する話
yumnumm
0
170
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
Workers Cache を知る
syumai
0
370
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
310
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Designing for Performance
lara
612
70k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
We Have a Design System, Now What?
morganepeng
55
8.4k
So, you think you're a good person
axbom
PRO
2
2.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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 валидация
конец