21

Как мы документируем программные интерфейсы. Алексей Миронов

  • Upload
    yandex

  • View
    67

  • Download
    4

Embed Size (px)

DESCRIPTION

Как мы документируем программные интерфейсы

Citation preview

Page 1: Как мы документируем программные интерфейсы. Алексей Миронов
Page 2: Как мы документируем программные интерфейсы. Алексей Миронов

Как мы документируем программные интерфейсы

Page 3: Как мы документируем программные интерфейсы. Алексей Миронов

│ С какими API и SDK нам │ приходится сталкиваться │ в Яндексе, какие методики │ и инструменты мы используем │ и как генерируем документацию │ из кода

Page 4: Как мы документируем программные интерфейсы. Алексей Миронов

Генерируем документацию

WEB Mobile •  Java •  Objective-C •  C# | C++

│ Javascript

│ HTTP

│ Java

│ Objective-C

│ C# | C++

Page 5: Как мы документируем программные интерфейсы. Алексей Миронов

/** Размечаем код */

Page 6: Как мы документируем программные интерфейсы. Алексей Миронов

Получаем результат

Page 7: Как мы документируем программные интерфейсы. Алексей Миронов

Page 8: Как мы документируем программные интерфейсы. Алексей Миронов

Что нам надо

│ Всё и правильно

│ DITA

│ Максимальный контроль

Page 9: Как мы документируем программные интерфейсы. Алексей Миронов

JavaScript. JSDoc

│ Всё и правильно — Да

│ DITA — Да

│ Максимальный контроль —Да

│ Данные — обычные │ {объекты:JavaScript}

│ Преобразование — │ шаблонизатор

│ Вызов шаблонов из JavaScript │ и JavaScript из шаблонов

Page 10: Как мы документируем программные интерфейсы. Алексей Миронов

JSDoc. Генерация ... <if test="data.exceptions.length"> <p translate="no"> <b>{+ (JSDOC.opt.D.lang == "ru" ? "Выбрасывает: " : "Throws: ") +}</b> </p> <dl> <for each="item" in="data.exceptions"> <dlentry> <dt translate="no"> {+ ((item.type)?" {"+(new Link().toSymbol(item.type))+"} " : "") +} {+ item.name +} </dt> <dd>{+ resolveLinks(item.desc) +}</dd> </dlentry> </for> </dl> </if> … Это похоже на Node.js

Page 11: Как мы документируем программные интерфейсы. Алексей Миронов

JSDoc. Результат

Page 12: Как мы документируем программные интерфейсы. Алексей Миронов

Mobile / Multilanguage

Несколько языков Java Objective-C C# | C++

«Одна» библиотека на нескольких языках

Нужен комбайн

Page 13: Как мы документируем программные интерфейсы. Алексей Миронов

│ Всё и правильно — Более │ менее

│ DITA — Да

│ Максимальный контроль — Да

│ Данные — <XML-файлы />

│ Преобразование — XSLT- │ шаблоны

│ Вызов шаблонов из Java │ и Java из шаблонов

Mobile / Multilanguage. Doxygen

Page 14: Как мы документируем программные интерфейсы. Алексей Миронов

Doxygen XML. Генерация

... <xsl:if test="$fields/memberdef"> <topic id="field_detail"> <title translate="no"> <xsl:value-of select="arina:getLocString('Field Detail')"/> </title> <body> <xsl:apply-templates select="$fields/memberdef[@kind='variable']"> <xsl:sort select="name"/> </xsl:apply-templates> </body> </topic> </xsl:if> ...

Page 15: Как мы документируем программные интерфейсы. Алексей Миронов

Doxygen XML. Результат

Page 16: Как мы документируем программные интерфейсы. Алексей Миронов

Doxygen надо проверять

Некорректно обрабатывал наследования при использовании generic-конструкций

public class FloatList extends ArrayList<Float>{...}

Исправлено.

http://www.stack.nl/~dimitri/doxygen/support.html

Page 17: Как мы документируем программные интерфейсы. Алексей Миронов

HTTP. Multilanguage http { server { location /one { # configuration for processing URIs with '/one' — Node.js ... }

location /two { # configuration for processing URIs with '/two' — Java ... }

location /three { # configuration for processing URIs with '/two' — Perl … }

} }

Page 18: Как мы документируем программные интерфейсы. Алексей Миронов

HTTP. Растворено в коде

var express = require('express') var app = express(); … app.get('/one', function(request, response) {

- // что-то происходит с request и response }); }); ...

Page 19: Как мы документируем программные интерфейсы. Алексей Миронов

HTTP. Что делать?

│ Схемы. WADL (<wadl:doc/>), WSDL 2.0 (<documentation/>)

│ Метаописания. Swagger. Песочницы

│ Соглашения. Программирование

Page 20: Как мы документируем программные интерфейсы. Алексей Миронов

Спасибо за внимание

Page 21: Как мы документируем программные интерфейсы. Алексей Миронов

[email protected] mironovalexey

Алексей Миронов

руководитель группы документирования программных интерфейсов