API 관련 용어 집중 과정

9659 단어 apidesignapiopenapi
API의 세계로 뛰어들려고 하는 사람은 상충되는 용어로 인해 혼란을 겪게 될 것입니다. 이 게시물에서는 주요 정의와 프로세스에 대해 다룰 것입니다. lunch&learn session at work 동안 이미 한 번 시도했지만 서면 형식으로 that old presentation 다시 방문 할 때가되었습니다.

마지막 참고 사항: 내 정의의 기초는 OpenAPI Glossary 에서 시작하여 Phil Sturgeon 입니다.

주요 정의

Specification is some standard or RFC or whatever describing a particular format or protocol.

Schema (aka: data model) is a metadata describing the data type, formats, and validation rules. Schema can be defined for content body, header, path or query parameters, etc.

Hypermedia controls is an easier way to say HATEOAS. What’s that? It’s a special affordance that allows a client to traverse API without hardcoding links. The simplest example would be including pagination links in the response data. E.g., a client asked to get collection of items — the server responded with first N items and a link to the next page of results — the client can use the link to get the next page without constructing a link on their own.

{
    "items": [
        {"id": 1},
        {"id": 2}
    ],
    "links": {
        "next": { "href": "/api/items?cursor=ae12fb2" }
    }
}

Description (aka: definition, contract) is a metadata about API, its endpoints, resources, operations, headers, parameters, and etc.

API description document is a file that contains API description. It is usually written with a particular format from specifications like OpenAPI, WSDL, RAML.

API documentation is a collection of information pieces that allows clients to successfully use an API. It includes, but not limited to, an API reference documentation (which is often generated from description document). Other important pieces are: tutorials, concept explanations, registration helpers, SDKs.

사양(일부)

There are tons of API-related specifications. I’ll cover only some.

OpenAPI 서비스 모델과 JSON 스키마를 기반으로 한 요청/응답 본문을 모두 설명하는 데 사용됩니다. Linux Foundation에 기부되기 전에는 Swagger라고 불렸습니다. 이것이 골치 아픈 부분을 만들었다는 사실을 눈치채셨을 것입니다. 사람들은 여전히 ​​그것을 Swagger라고 부릅니다. 아마도 "OpenAPI"가 한 입 가득하기 때문일 것입니다. 어쨌든 Swagger는 Swagger Editor 또는 SwaggerUI와 같은 도구의 SwaggerHub 브랜딩의 일부일 뿐입니다.


참고: 더 이상한 상황에서도 "swagger"라는 단어를 사용하는 사람들을 우연히 만날 수 있습니다.
  • "API"의 동의어로 "우리는 사용자 생성을 위해 swagger를 개발했습니다!", "이 swagger를 사용하여 파일 내보내기!"
  • 응답 본문의 동의어로 "요청을 하고 swagger를 돌려받았습니다..."



  • JSON Schema은 JSON 데이터의 인스턴스를 설명하기 위한 것입니다. OpenAPI는 그것의 확장된 하위 집합을 사용하고 있었지만 이것은 OAS 3.1에서 수정되었으며 이제 완전히 호환됩니다. 왜 중요합니까? 글쎄요, JSON 스키마에는 클라이언트 측 유효성 검사 또는 HATEOAS 지원을 위한 추가 도구가 있습니다.

    JSON: API은 API 구축을 위한 자전거 이동 방지 사양입니다. 이름 지정 및 기타 패턴에 대한 자신만의 지침을 만들지 않는다고 상상해 보십시오! 주목할만한 기능은 HATEOAS에 대한 뿌리 깊은 지원입니다.

    AsyncAPI은 OpenAPI와 유사하지만 이벤트 기반 아키텍처용입니다. Kafka, AMQP, WebSocket을 생각해 보십시오.

    주목할만한 언급: gRPC , GraphQL , OData , HAL , Siren .

    프로세스

    API 우선 vs. API 디자인 우선 vs. API 코드 우선

    Read this article for more details . 여기 TL;DR이 있습니다.

    API 우선은 제품으로서 API에 접근하는 방법에 관한 것입니다. 이미 생성된 시스템 위에 나중에 생각하는 것이 아니라 처음부터 바로 생각하는 것입니다. 좋은 예는 최근에 Obsidian’s devs에서 나왔습니다.

    For the developer the biggest issue is migrating an existing app that wasn’t designed with plugin/API in mind. Having experienced this first hand with our previous product, we designed Obsidian from the ground up with a plugin API from the first version.



    API 디자인 우선은 코딩이 시작되기 전에 디자인을 프로토타이핑하고 테스트하는 것을 의미합니다. API 코드 우선(또는 구현 우선)은 설계 단계에서도 일부 코드를 작성하는 것을 의미합니다. 그러나 종종 더 제한된 정의가 사용되며 이는 설명 문서 또는 코드와 같은 진실의 근원에 관한 것입니다.
  • 디자인 우선: "설명 문서를 먼저 작성한 다음 구현합니다."
  • 코드 우선: "코드에 주석을 달고 이러한 주석에서 설명 문서를 생성합니다."

  • 내가 말했듯이 이것은 더 제한된 정의입니다! 내가 링크 한 기사는 더 넓은 기사를 사용합니다.

    설명 문서 유효성 검사 vs. Linting vs. 전처리

    API description doc is often written in machine-readable format, thus, we can manipulate it and check for errors.

    Validation checks that description doc conforms to some specification.

    Linting checks custom rules like style. For example: check that all paths are lowercase.

    Preprocessing allows transforming the doc based on additional rules before using it in code or documentation generation. For example, hiding some endpoints from the published version or injecting descriptions from markdown files.

    $참조

    When working with OpenAPI or JSON Schema you will stumble upon $ref ’s a great deal. These are pointers to JSON structures in different locations: inside the same file or to some other file:

    For example, this reference points to the schema from the other file.

    ...
    application/json:
      schema:
        type: object
        properties:
          data:
            $ref: ../components/schemas/Users/User.yaml
    
    

    References help with structuring schemas, separating them into reusable pieces.

    The process of looking for value of $ref is called resolution (or lookup). Not all tools and libraries play well with multi-file resolutions, so you may want to do one of these:

    • Bundling (aka: external inlining) replaces $ref ’s to external files with internal references. This creates one file that is easier to share.
    • Dereferencing (aka: internal inlining) replaces $ref ’s to external or internal data with actual data. The resulting file will have no $ref ’s, but will be noticeably bigger.

    This post was triggered by discussion with Areti Panou AB Testing podcast’s slack . 나는 그것이 당신을 도울 수 있기를 바랍니다!

    좋은 웹페이지 즐겨찾기