PHPUnit + openapi-validator에서 "스키마가 양수, 구현이 추종"으로 설정
이번에 이야기하고 싶은 것
(API 개발 팀의 한 프레임)
「『구현이 정, 스키마가 추종』은 무리군요」
「『스키마가 정, 실장이 추종』하도록 하고 싶네요」
※본 기사는 Laravel/Vue.js 공부회 #10의 발표 자료입니다
하자.
PHPUnit에서 API가 스키마와 다른 응답을 반환하면 떨어지는 테스트를 작성하십시오
이를 위해 필요한 것
OpenApi
스키마를 작성하기위한 대단한 yaml (JSON).
뭐 뭐 기억하는 경우가 많다.
이런 느낌
openapi: 3.0.2
info:
title: 蔵書管理システムAPIドキュメント
description: 蔵書管理システムのAPIドキュメントです
version: 1.0.0
servers:
- url: https://example.com/api
description: 本番環境
paths:
/books:
get:
summary: 本の一覧
description: |
登録してある本の一覧を取得できます
operationId: getBooks
parameters:
- name: borrow
in: query
description: |
貸出中を含める
required: false
schema:
type: boolean
example: true
responses:
200:
description: 成功
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/book'
components:
schemas:
book:
title: Book
description: Bookのスキーマです。
required:
- id
- title
- created_at
- updated_at
type: object
properties:
id:
type: integer
title:
type: string
created_at:
type: string
updated_at:
type: string
example:
id: "1"
title: "Love beautiful code"
created_at: "2019-07-08 15:22:15"
updated_at: "2019-07-08 15:22:15"
Q. 뭔가 잘 모르겠지만…
A. 익숙해지면 읽을 수 있습니다! 최선을 다하십시오! !
redoc-cli
조금 전 모르는 yaml을 html로 해주는 사람
명령 한 번으로 문서를 만들 수 있기 때문에 편리합니다.
redoc-cli bundle ./resources/docs/apiV1.yml -o ~/book_sample.html
이런 느낌
openapi-validator
OpenApi의 yaml을 PHPUnit으로 가져 오는 사람
[이미지 다이어그램]
response => Validator = (OK) => Green
= (NG) => Red
구현해보기
(Laravel을 사용하는 전제)
1. OpenApi에서 스키마 작성
최선을 다합시다!
(문서 보면서 악전 고투할 수밖에 없는 것 같은 생각이… )
이번에는 완성 된 스키마는
resources/docs/apiV1.yml
에 넣습니다.2. PHPUnit (openapi-validator)에서 스키마를 호출합니다.
이런 느낌입니다
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Mmal\OpenapiValidator\Validator;
use Symfony\Component\Yaml\Yaml;
class ApiV1Test extends TestCase
{
/** @var Validator */
static $openApiValidator;
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();
self::$openApiValidator = new Validator(Yaml::parse(file_get_contents(resource_path('docs/apiV1.yml'))));
}
/**
* @test
*/
public function getBooks()
{
$response = $this->get('api/book');
$result = self::$openApiValidator->validate('getBooks', 200, json_decode($response->getContent(), true));
$this->assertFalse($result->hasErrors(), $result);
}
}
$openApiValidator
로로드 $openApiValidator
전달 실제로 해보자(Red)
응답에서
updated_at
를 지우면 ...있어야 할 속성이 없으면 화가납니다! 레드! !
실제로 해보자 (Green)
응답에
updated_at
를 추가하면 ...응답과 스키마의 정의가 동일! Green! !
시험이 다 통과한 후
redoc-cli로 스키마를 html로 공개!
마지막으로
무엇이 힘들어, OpenApi(yaml) 쓰는 것이 어쨌든 괴롭습니다 (^o^)
기존에 API가 있으면 더욱 어색합니다 (^o^)(^o^)
Reference
이 문제에 관하여(PHPUnit + openapi-validator에서 "스키마가 양수, 구현이 추종"으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kon_shou/items/6e51c5dfe55c834b99c1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)