Язык RFC: MUST, SHOULD, MAY (RFC 2119)

Тема дорожной карты · Английский для IT

🔊 Словарь терминов с произношением →

RFC 2119 — короткий документ 1997 года, который определяет пять ключевых слов для выражения требований в спецификациях, и с тех пор его язык стал стандартом не только для IETF, но и для внутренних спецификаций, ADR, API-контрактов и даже правил code style. MUST (синонимы REQUIRED, SHALL) — абсолютное требование, без вариантов. MUST NOT (SHALL NOT) — абсолютный запрет. SHOULD (RECOMMENDED) — настоятельная рекомендация: отступить можно, но нужны веские причины и понимание последствий. SHOULD NOT (NOT RECOMMENDED) — настоятельно не рекомендуется. MAY (OPTIONAL) — действительно необязательно, реализация может делать или не делать, и обе стороны обязаны корректно работать друг с другом. RFC 8174 уточнил, что эти значения действуют только когда слова написаны заглавными буквами; строчные must и should — обычный английский. Сами RFC имеют структуру: Abstract — аннотация, Status of This Memo, Introduction, Terminology (здесь и ссылка на RFC 2119), Requirements Language, основные разделы, Security Considerations — обязательный раздел, IANA Considerations, References (Normative — обязательные к прочтению, Informative — для справки), Appendix, Authors' Addresses. Статусы документов: Internet-Draft (черновик, draft-ietf-…), Proposed Standard, Internet Standard (STD), Informational, Experimental, Best Current Practice (BCP), Historic; obsoletes — заменяет, obsoleted by — заменён, updates / updated by — дополняет, errata — известные ошибки. Другие слова спецификаций: conformant / compliant — соответствующий, implementation — реализация, interoperability — совместимость реализаций, wire format — формат передачи, octet — байт, well-formed — синтаксически корректный, valid — семантически корректный, undefined behaviour — неопределённое поведение, implementation-defined, reserved — зарезервировано, deprecated, out of scope — вне рамок документа, for further study.

Как произносится

RFC по буквам /ˌɑːr ɛf ˈsiː/, request for comments /rɪˈkwɛst fɔːr ˈkɒmɛnts/, must /mʌst/, shall /ʃæl/, should /ʃʊd/ (l немая), may /meɪ/, required /rɪˈkwaɪərd/, recommended /ˌrɛkəˈmɛndɪd/, optional /ˈɒpʃənəl/, normative /ˈnɔːrmətɪv/, informative /ɪnˈfɔːrmətɪv/, abstract /ˈæbstrækt/ (существительное, ударение на первый слог), terminology /ˌtɜːrmɪˈnɒlədʒi/, conformant /kənˈfɔːrmənt/, compliant /kəmˈplaɪənt/, interoperability /ˌɪntərˌɒpərəˈbɪləti/ (семь слогов), octet /ˈɒktɛt/, errata /ɛˈrɑːtə/ («эрАта»), obsolete /ˌɒbsəˈliːt/ («обсэлИт»), IETF по буквам, IANA /aɪˈænə/ или /aɪˈɑːnə/, draft /drɑːft/, appendix /əˈpɛndɪks/.

Как употребляется

Как ключевые слова выглядят в спецификации и в обычной инженерной речи:

  • The server MUST return 401 if the token is missing. — Сервер обязан вернуть 401 при отсутствии токена.
  • Clients SHOULD retry with exponential backoff. — Клиентам настоятельно рекомендуется повторять с экспоненциальной паузой.
  • Implementations MAY cache the response for up to 60 seconds. — Реализации могут кэшировать ответ до 60 секунд.
  • The field MUST NOT contain whitespace. — Поле не должно содержать пробелов.
  • This behaviour is undefined and SHOULD NOT be relied upon. — Поведение не определено, полагаться на него не следует.
  • Is that a MUST or a SHOULD? — Это обязательно или рекомендуется? (типичный вопрос на дизайн-ревью)
  • Let's make it a MUST in our API guidelines. — Сделаем это обязательным в наших правилах API.
  • Security Considerations are normative here. — Раздел безопасности здесь нормативный.

Внутренние документы часто начинают с фразы: The key words "MUST", "SHOULD" and "MAY" in this document are to be interpreted as described in RFC 2119.

Ловушки

Первая ловушка — SHOULD как «должен»: русский перевод «должен» соответствует MUST; SHOULD — «следует». Вторая — MAY как «может (быть)»: это разрешение, не вероятность; вероятность выражают might или can. Третья — строчные must / should трактовать как требования: после RFC 8174 только заглавные несут специальный смысл. Четвёртая — SHALL как «будет»: в спецификациях это синоним MUST, юридическое «обязан». Пятая — obsolete с ударением на первый слог: /ˌɒbsəˈliːt/. Шестая — Informational RFC считать стандартом: это информационный документ, не требование. Седьмая — abstract как «абстрактный»: в документе это аннотация. Восьмая — normative и informative references не различать: первые обязательны для реализации.

Связанные понятия

Полезные ресурсы