Oat++ เป็น Web Framework ที่ทันสมัยสำหรับ C++ มีการโหลดอย่างเต็มที่และมีส่วนประกอบที่จำเป็นทั้งหมดเพื่อการพัฒนาระดับการผลิตที่มีประสิทธิภาพ มันยังเบาและมีหน่วยความจำขนาดเล็กอีกด้วย
1.3.0-latest
ติดตามบันทึกการเปลี่ยนแปลงเพื่อดูข่าวสารและฟีเจอร์ในเวอร์ชัน 1.4.0
พิจารณาสนับสนุน Oat++ ผ่านทางหน้าผู้สนับสนุน GitHub
oatpp-mysql โดย @Atarasin
oatpp-mariadb โดย @lilltiger
เริ่มต้นเลย
สร้างสำหรับ Unix/Linux
สร้างสำหรับ Windows
ตัวอย่าง
การบำรุงรักษาและพัฒนาโครงการนี้ต้องใช้เวลาและทรัพยากรจำนวนมาก หากคุณสนุกกับการใช้มันและต้องการสนับสนุนการพัฒนาอย่างต่อเนื่อง โปรดพิจารณาสนับสนุนเราผ่านผู้สนับสนุน GitHub
ร่วมเป็นสปอนเซอร์บน GitHub
ทุกๆ การสนับสนุน ไม่ว่าเล็กหรือใหญ่ ช่วยให้เราปรับปรุงและรักษาโครงการต่อไปได้ ขอบคุณสำหรับการสนับสนุนของคุณ!
เว็บไซต์
แพลตฟอร์มที่รองรับ
เกณฑ์มาตรฐานล่าสุด: 5 ล้าน WebSockets
มีส่วนร่วมในข้าวโอ๊ต++
ทางลัด:
ภาพรวมระดับสูงของ Oat++ - ดูภาพรวมโดยย่อของคุณสมบัติ Oat++
ตัวอย่างโครงการ - ตัวอย่างที่สมบูรณ์ของบริการ "CRUD" (UserService) ที่สร้างด้วย Oat++ REST + Swagger-UI + SQLite
ดู ApiController สำหรับรายละเอียดเพิ่มเติม
ENDPOINT_INFO(getUserById) { ข้อมูล -> สรุป = "รับผู้ใช้หนึ่งรายตามรหัสผู้ใช้"; ข้อมูล->addResponse<Object<UserDto>>(สถานะ::CODE_200, "application/json"); ข้อมูล->addResponse<Object<StatusDto>>(สถานะ::CODE_404, "application/json"); ข้อมูล->addResponse<Object<StatusDto>>(สถานะ::CODE_500, "application/json"); ข้อมูล->pathParams["userId"].description = "ตัวระบุผู้ใช้"; }จุดสิ้นสุด("GET", "users/{userId}", getUserById, PATH(Int32, userId)) { กลับ createDtoResponse(สถานะ::CODE_200, m_userService.getUserById(userId)); -
ดู Oat++ ORM สำหรับรายละเอียดเพิ่มเติม
QUERY(createUser, "INSERT INTO users (ชื่อผู้ใช้, อีเมล, บทบาท) VALUES (:username, :email, :role);", PARAM(oatpp::String, ชื่อผู้ใช้), PARAM(oatpp::String, อีเมล), PARAM(oatpp::Enum<UserRoles>::AsString, บทบาท))
Gitter - พูดคุยกับนักพัฒนา Oat++ และผู้ใช้ Oat++ คนอื่นๆ
Twitter - ติดตาม Oat++ บน Twitter
Reddit - ติดตาม subreddit ของ Oat++
StackOverflow (ใหม่) - โพสต์คำถาม
REST Service - ตัวอย่างที่สมบูรณ์ของบริการ "CRUD" (UserService) ที่สร้างด้วย Oat++ REST + Swagger-UI + SQLite
REST Client - โปรเจ็กต์ตัวอย่างวิธีใช้ Wrapper ไคลเอนต์ที่มีลักษณะคล้ายชุดติดตั้งเพิ่ม (ApiClient) และวิธีการทำงาน
Can Chat - แชทตามห้องที่มีฟีเจอร์ครบครันสำหรับผู้ใช้นับหมื่น ไคลเอนต์และเซิร์ฟเวอร์
WebSocket - ชุดตัวอย่าง oatpp WebSocket
YUV Websocket Stream - ตัวอย่างโปรเจ็กต์วิธีสร้างสตรีมรูปภาพ YUV จากอุปกรณ์ V4L (เว็บแคม iE) โดยใช้ websockets
SQLite - ตัวอย่างที่สมบูรณ์ของบริการ "CRUD" REST + Swagger-UI + SQLite
PostgreSQL - ตัวอย่างของบริการเอนทิตีระดับการผลิตที่จัดเก็บข้อมูลใน PostgreSQL ด้วย Swagger-UI และโปรไฟล์การกำหนดค่า
MongoDB - ตัวอย่างโครงการวิธีการทำงานกับ MongoDB โดยใช้ oatpp-mongo mondule Project เป็นบริการบนเว็บที่มี CRUD และ Swagger-UI พื้นฐาน
ตัวอย่าง-IoT-Hue - ตัวอย่างโปรเจ็กต์วิธีสร้าง REST-API ที่เข้ากันได้กับ Philips Hue ซึ่งค้นพบและควบคุมได้โดยอุปกรณ์สมาร์ทโฮมที่เข้ากันได้กับ Hue เช่น Amazon Alexa หรือ Google Echo
เซิร์ฟเวอร์สตรีมมิ่ง HTTP Live - โปรเจ็กต์ตัวอย่างเกี่ยวกับวิธีสร้างเซิร์ฟเวอร์สตรีมมิ่ง HLS โดยใช้ Oat++ asynchronous API
YUV Websocket Stream - ตัวอย่างโปรเจ็กต์วิธีสร้างสตรีมรูปภาพ YUV จากอุปกรณ์ V4L (เว็บแคม iE) โดยใช้ websockets
TLS พร้อม Libressl - ตัวอย่างโปรเจ็กต์วิธีตั้งค่าการเชื่อมต่อที่ปลอดภัยและให้บริการผ่าน HTTPS
Consul Integration - ตัวอย่างโครงการเกี่ยวกับวิธีใช้ oatpp::consul::Client บูรณาการกงสุล
ไมโครเซอร์วิส - ตัวอย่างโครงการเกี่ยวกับวิธีสร้างไมโครเซอร์วิสด้วย Oat++ และตัวอย่างเกี่ยวกับวิธีการรวมไมโครเซอร์วิสเหล่านั้นโดยใช้เทคนิคการทำให้เป็นก้อนเดียว
บริการ Async - โครงการตัวอย่างเกี่ยวกับวิธีใช้ API แบบอะซิงโครนัสเพื่อจัดการการเชื่อมต่อพร้อมกันจำนวนมาก
"ข้าวโอ๊ต" เป็นอาหารที่บางเบา ออร์แกนิก และเป็นสีเขียว สามารถปรุงและบริโภคได้ง่ายโดยไม่ต้องใช้ความพยายาม
"++" ให้คำแนะนำว่าเป็น "บางอย่าง" สำหรับ C++
Oat++ ใช้เพื่อวัตถุประสงค์ที่แตกต่างกันมากมาย ตั้งแต่การสร้าง REST API ที่ทำงานบนอุปกรณ์ฝังตัวไปจนถึงการสร้างไมโครเซอร์วิสและแอปพลิเคชันระบบคลาวด์ที่มีการโหลดสูง
แต่กรณีการใช้งานส่วนใหญ่ดูเหมือนจะอยู่ใน IoT และ Robotics
ตามทฤษฎีแล้ว Oat++ สามารถย้ายได้ อย่างง่ายดาย ทุกที่ที่คุณมี เธรด และ network stack ด้วยความพยายามเพียงเล็กน้อยเพิ่มเติม จึงสามารถย้ายได้เกือบทุกที่ ขึ้นอยู่กับว่าคุณดึงมันออกมามากแค่ไหนและขนาดไบนารีสุดท้ายจะเป็นเท่าใด
ดูแพลตฟอร์มที่รองรับสำหรับข้อมูลเพิ่มเติม
ประมาณ 1Mb ขึ้นอยู่กับเวอร์ชัน C/C++ std-lib และ oatpp
เลือก Simple API ทุกครั้งที่เป็นไปได้ Simple API ได้รับการพัฒนามากขึ้นและทำให้โค้ดสะอาดขึ้น
Async API ได้รับการออกแบบสำหรับงานเฉพาะเจาะจงขนาดเล็กที่ทำงานในระดับการทำงานพร้อมกันสูง เช่น:
ให้บริการดาวน์โหลดไฟล์แก่ผู้ใช้พร้อมกันจำนวนมาก (ผู้ใช้ 1,000 คนขึ้นไป)
สตรีมมิ่งไปยังไคลเอนต์จำนวนมาก (1K หรือมากกว่า)
เซิร์ฟเวอร์ Websocket Chat
สำหรับวัตถุประสงค์อื่นทั้งหมด ให้ใช้ API แบบง่าย