การแปลงข้อมูลจำเพาะของ Swagger JSON เป็นเอกสาร HTML


90

สำหรับ REST API บางตัวที่เขียนด้วย PHP ฉันถูกขอให้สร้างเอกสารSwaggerและเนื่องจากฉันไม่รู้วิธีง่ายๆในการเพิ่มคำอธิบายประกอบให้กับ API ที่มีอยู่เหล่านั้นและสร้างเอกสารดังกล่าวฉันจึงใช้ตัวแก้ไขนี้เพื่อสร้างบางส่วนในตอนนี้

ฉันบันทึกไฟล์ JSON และ YAML ที่สร้างโดยใช้โปรแกรมแก้ไขนั้นและตอนนี้ฉันต้องสร้างเอกสาร Swagger แบบโต้ตอบขั้นสุดท้าย (คำสั่งนี้อาจฟังดูไร้เดียงสาและคลุมเครือ)

ใครช่วยบอกฉันหน่อยได้ไหมว่าฉันจะแปลงไฟล์ข้อมูลจำเพาะ Swagger JSON เป็นเอกสาร Swagger จริงได้อย่างไร

ฉันอยู่บนแพลตฟอร์ม Windows และไม่รู้อะไรเกี่ยวกับ Ant / Maven


ฉันลอง [ github.com/wordnik/swagger-ui](Swagger UI) แต่มันไม่แสดง json ของฉัน คำเตือนเดียวที่แสดงคือ "API นี้กำลังใช้ Swagger เวอร์ชันที่เลิกใช้แล้วโปรดดูข้อมูลเพิ่มเติมที่github.com/wordnik/swagger-core/wiki "
สลิล

คำตอบ:


43

ฉันไม่พอใจกับswagger-codegenตอนที่ฉันกำลังมองหาเครื่องมือในการทำสิ่งนี้ดังนั้นฉันจึงเขียนของฉันเอง ลองดูbootprint-swagger

เป้าหมายหลักเมื่อเทียบกับswagger-codegenคือการตั้งค่าที่ง่าย (แม้ว่าคุณจะต้องใช้ nodejs) และควรปรับเปลี่ยนสไตล์และเทมเพลตให้เข้ากับความต้องการของคุณได้ง่ายซึ่งเป็นฟังก์ชันหลักของbootprint -project


9
คำเตือน: เมื่อวันที่ 11/2016 ผู้เขียน bootprint-swagger ได้ยกเลิกโครงการนี้ swagger-codegen ยังคงได้รับการสนับสนุนอย่างดี
Brent Matzelle

22
ฉันเป็นผู้เขียนและข้อความระบุว่า: "ฉันขอโทษที่ต้องบอกว่าฉันจะไม่สามารถพัฒนาฟีเจอร์ใหม่สำหรับโปรเจ็กต์นี้ได้ในอนาคตอันใกล้นี้ แต่ฉันอาจจะสามารถพูดคุยและรวมคำขอดึง และเผยแพร่เวอร์ชันใหม่ " คุณอาจเรียกสิ่งนั้นว่าการละทิ้งฉันจะเรียกว่า "ระงับ" ฉันจะเชิญทุกคนที่สนใจเข้าร่วมโครงการ
Nils Knappmeier

1
พบว่าspectacleสร้างเอกสารที่ดูดีขึ้นมากจาก swagger JSON
นิรันด

61

พยายามที่จะใช้redoc-CLI

ผมใช้bootprint-openapiโดยที่ฉันได้รับการสร้างพวงของไฟล์ ( bundle.js, bundle.js.map, index.html, main.cssและmain.css.map) และจากนั้นคุณสามารถแปลงมันเป็นหนึ่ง.htmlไฟล์โดยใช้HTML-อินไลน์เพื่อสร้างง่ายindex.htmlไฟล์

จากนั้นฉันพบว่าredoc-cliใช้งานง่ายมากและผลลัพธ์ก็น่ากลัวจริงๆไฟล์index.html เดียวและสวยงาม

การติดตั้ง :

npm install -g redoc-cli

การใช้งาน :

redoc-cli bundle -o index.html swagger.json

8
เครื่องมือนี้ให้ผลลัพธ์ที่สวยงามที่สุดในบรรดาเครื่องมือทั้งหมดที่กล่าวถึง
Jakub Moravec

ไฟล์ HTML แบบ all-in-one ที่สร้างขึ้นมีขนาดค่อนข้างใหญ่ ดังนั้นการพึ่งพาไลบรารี JS (~ 800KB) ในกรณีของการแสดงผลสดจาก HTML ที่กำหนดเอง มีใครรู้บ้างว่าลดขนาดได้ยังไง?
aaronqli

1
อันนี้ดีที่สุดสำหรับ imo และเนื่องจากเรากำลังสร้างสิ่งนี้สำหรับนักพัฒนาที่ใช้เดสก์ท็อปขนาดเอาต์พุตจึงไม่ใช่ปัญหา
milosmns

3
การใช้ชื่อปฏิบัติการโดยตรงไม่ได้ผลเสมอไปการดำเนินการโดยnpx redoc-cli ...จะเชื่อถือได้มากกว่า
Crouching Kitten

21

ทุกอย่างยากเกินไปหรือมีเอกสารไม่ดีดังนั้นฉันจึงแก้ไขสิ่งนี้ด้วยสคริปต์ง่ายๆswagger-yaml-to-html.pyซึ่งใช้งานได้เช่นนี้

python swagger-yaml-to-html.py < /path/to/api.yaml > doc.html

สิ่งนี้มีไว้สำหรับ YAML แต่การแก้ไขให้ทำงานกับ JSON ก็เป็นเรื่องเล็กน้อยเช่นกัน


พร้อมใช้งานในฐานะนักเทียบท่าแล้ว! github.com/yousan/swagger-yaml-to-html
noamtm

19

ลองดูสวย ๆ

มันมี

  1. มีลักษณะคล้ายกับแผงด้านขวาของSwagger-Editor
  2. ค้นหา / กรอง
  3. Schema Folding
  4. คำติชมสด
  5. เอาต์พุตเป็นไฟล์ html เดียว

ฉันกำลังดู Swagger Editor และคิดว่ามันสามารถส่งออกบานหน้าต่างแสดงตัวอย่างได้ แต่กลับกลายเป็นว่าทำไม่ได้ เลยเขียนเวอร์ชั่นของตัวเอง

การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้เขียนเครื่องมือ


1
ฉันพบว่าค่อนข้างสวยเป็นเครื่องมือที่ตรงไปตรงมาและในอุดมคติโดยมีจุดเข้า CLI และ API ที่เหมาะสม ข้อร้องเรียนหนึ่งเดียวของฉัน (และสิ่งที่บังคับให้ฉันจัดการกับความซับซ้อนของ swagger-ui แทน) คือความล้มเหลวในการจัดการองค์ประกอบ / ส่วนขยายของวัตถุอย่างถูกต้อง การใช้งานใด ๆallOfในเอกสารจะก่อให้เกิดundefinedแม้ในสถานการณ์ที่ง่ายที่สุด ("การรวม" วัตถุชิ้นเดียวเทียบเท่ากับการไม่ใช้allOfเลย)
HonoredMule

3
เพิ่งเปิดตัวallOfคุณลักษณะสำหรับคุณ ลองดูสิ
TLJ

2
ไม่สนับสนุน Swagger / OpenAPI V3
SeinopSys

16

ดูโครงการswagger-api / swagger-codegenบน GitHub; โครงการ README แสดงวิธีใช้เพื่อสร้าง HTML แบบคงที่ ดูการสร้างเอกสาร API แบบ HTML แบบคงที่

หากคุณต้องการดู swagger.json คุณสามารถติดตั้ง Swagger UIและเรียกใช้งานได้ คุณเพียงแค่ปรับใช้บนเว็บเซิร์ฟเวอร์ (โฟลเดอร์ dist หลังจากที่คุณโคลน repo จาก GitHub) และดู Swagger UI ในเบราว์เซอร์ของคุณ มันเป็นแอพ JavaScript


ขอบคุณ. ปัญหาของฉันคือ swagger-ui ไม่ยอมรับข้อมูลจำเพาะ 2.0 อย่างไรก็ตามนี่ดูเหมือนคำตอบที่ง่ายที่สุดดังนั้นฉันจะยอมรับสิ่งนี้ (สำหรับตอนนี้)
สลิล

เครื่องมือ Swagger ยังคงพัฒนาสำหรับ 2.0 อย่างไรก็ตามฉันพบว่า Swagger UI ใช้งานได้กับไฟล์ 2.0 ของฉันที่ขึ้นต้นด้วย "swagger": "2.0",
djb

นอกจากนี้จาก Swagger Editor คุณสามารถส่งออกข้อมูลจำเพาะ JSON (ไม่ใช่ YAML แต่เป็น JSON) และ Swagger UI ควรจะอ่านได้ (หมายเหตุ: swagger.json ต้องอยู่บนโฮสต์ / พอร์ตเดียวกันกับแอป Swagger UI หรือคุณต้องเปิดใช้งาน CORS โปรดดู README.md ใน Swagger Editor บน GitHub
djb

14

ฉันใช้เวลานานมากและลองใช้วิธีแก้ปัญหาต่างๆมากมายในที่สุดฉันก็ทำแบบนี้:

<html>
    <head>    
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3.17.0/swagger-ui.css">
        <script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
        <script>

            function render() {
                var ui = SwaggerUIBundle({
                    url:  `path/to/my/swagger.yaml`,
                    dom_id: '#swagger-ui',
                    presets: [
                        SwaggerUIBundle.presets.apis,
                        SwaggerUIBundle.SwaggerUIStandalonePreset
                    ]
                });
            }

        </script>
    </head>

    <body onload="render()">
        <div id="swagger-ui"></div>
    </body>
</html>

คุณต้องมีpath / to / my / swagger.yamlจากตำแหน่งเดียวกัน
(หรือใช้ส่วนหัว CORS)


ยอดเยี่ยมขอบคุณ! ฉันได้ใช้ <link rel = "stylesheet" href = " petstore.swagger.io/swagger-ui.css "> <script src = " petstore.swagger.io/swagger-ui-bundle.js "></script >
Erando

7

คุณยังสามารถดาวน์โหลด ui ผยองได้จาก: https://github.com/swagger-api/swagger-uiใช้โฟลเดอร์ dist แก้ไข index.html: เปลี่ยนตัวสร้าง

const ui = SwaggerUIBundle({
    url: ...,

เป็น

const ui = SwaggerUIBundle({
    spec: YOUR_JSON,

ตอนนี้โฟลเดอร์ dist มีทุกสิ่งที่คุณต้องการและสามารถแจกจ่ายได้ตามที่เป็นอยู่


2

ดูลิงค์นี้: http://zircote.com/swagger-php/installation.html

  1. ดาวน์โหลดไฟล์ phar https://github.com/zircote/swagger-php/blob/master/swagger.phar
  2. ติดตั้ง Composer https://getcomposer.org/download/
  3. ทำให้ composer.json
  4. โคลน swagger-php / ไลบรารี
  5. โคลน swagger-ui / library
  6. สร้างคลาสทรัพยากรและโมเดล php สำหรับ API
  7. เรียกใช้ไฟล์ PHP เพื่อสร้าง json
  8. ให้เส้นทางของ json ใน api-doc.json
  9. กำหนดเส้นทางของ api-doc.json ใน index.php ภายในโฟลเดอร์ swagger-ui dist

หากคุณต้องการความช่วยเหลืออื่นโปรดอย่าลังเลที่จะถาม


1
มีเครื่องมือแก้ไขออนไลน์ (นอกเหนือจากโปรแกรมแก้ไขแบบผยอง) ที่สามารถสร้างสิ่งนี้ให้ฉันได้หรือไม่ ฉันไม่ต้องการใส่คำอธิบายประกอบ PHP API ของฉันหากมีวิธีที่ง่ายกว่านี้ ปัญหาที่ฉันพบก็คือตัวแก้ไขผยองสร้างข้อมูลจำเพาะของ swagger v2.0 และ swagger-ui ไม่สามารถจัดการได้ในตอนนี้
สลิล

@Salil ทั้งหมดที่ฉันรู้ก็คือผยองมีโปรแกรมแก้ไขออนไลน์ของตัวเองเช่นeditor.swagger.wordnik.comฉันไม่ทราบเกี่ยวกับโปรแกรมแก้ไขออนไลน์อื่น ๆ หากคุณพบแบ่งปันกับเราขอบคุณ :)
Syed Raza Mehdi

2

มีโปรแกรม Javaขนาดเล็กที่สร้างเอกสาร (adoc หรือ md) จากไฟล์ yaml

Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
        .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
        .withSwaggerMarkupLanguage(MarkupLanguage.ASCIIDOC)
        .withOutputLanguage(Language.DE)
        .build();

Swagger2MarkupConverter builder = Swagger2MarkupConverter.from(yamlFileAsString).withConfig(config).build();
return builder.toFileWithoutExtension(outFile);

แต่น่าเสียดายที่จะสนับสนุนเฉพาะOpenAPI 2.0แต่ไม่OpenAPI 3.0


2

สำหรับ Swagger API 3.0 การสร้างรหัสไคลเอนต์ Html2 จาก Swagger Editor ออนไลน์ทำงานได้ดีสำหรับฉัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.