diff --git a/website/docs/dev_api_cpp.md b/website/docs/dev_api_cpp.md index 3bf87c84..018cf0c5 100644 --- a/website/docs/dev_api_cpp.md +++ b/website/docs/dev_api_cpp.md @@ -6,61 +6,73 @@ description: Information about AYON C++ API toc_max_heading_level: 5 --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + ## About AYON C++ API -The AYON CPP API allows communication with the AYON server. +The AYON CPP API is a static lib. It allows communication with the AYON server. Implementation is mainly focused on [AYON USD Resolver](dev_api_usd_resolver.md) to communicate with the server resolve endpoint. -## Get Started - :::tip Development Environment -We assume you already have setup your c++ dev environment as well as cmake. +We assume you already have setup your C++ dev environment as well as cmake. +You need to use at least C++17 in CMake ::: -### Fetch and Build The library -AYON CPP API is a static lib. - -You need to build it first. We've prepared python script to do the hard lifting for you. - -```shell -git clone --recurse-submodules https://github.com/ynput/ayon-cpp-api.git -cd ayon-cpp-api -python AyonBuild.py setup -python AyonBuild.py runStageGRP CleanBuild -``` -### Include it in your cmake projects +## C++ Example Project -Once you include it and build your cpp project you'll no longer need the library. +Once built, you can then start including it in your cpp projects. -
A CPP Example + + -Here's an example cpp project structure ``` . ├─ ext/ayon-cpp-api ├─ CMakelists.txt └─ main.cpp ``` + + -#### Fetch Dependencies - -Please refer to [Fetch and Build The library](#fetch-and-build-the-library) section above for the instructions -and repeat them inside `ext` folder in your project folder. - -#### CPP Project Files - -```cpp title="main.cpp" +```cpp // AYON CPP API Test +#include #include "AyonCppApi.h" int main (){ - AyonApi con = AyonApi(); + std::string project_name = "" ; + std::cout << "Enter a project: "; + std::cin >> project_name; + + AyonApi con = AyonApi( + "log/log.json", // extension will be always changed to json + "your_access_token", // This is a Bearer access token not AYON_API_KEY + "https://your.server", // with No trailing or forward slash at the end. + project_name, + "your-site-id" // Your site id e.g. military-mouse-of-jest + ); + + std::string uri = "" ; + std::cout << "Enter a uri to resolve: "; + std::cin >> uri; + + std::pair resolvedAsset = con.resolvePath(uri); + std::cout << "The resolved path: " << resolvedAsset.second << std::endl; return 0; } ``` +:::caution + +The auth key used in the cpp example is an [Authentication Token](https://community.ynput.io/t/ayon-rest-api-guide/1268#get-authentication-token-6) which is not an `AYON_API_KEY`. +Also, don't add a trailing forward slash to your AYON server URL. +::: + + + -```shell title="CMakelists.txt" +```shell cmake_minimum_required(VERSION "3.28.1") set(CMAKE_CXX_STANDARD 17) @@ -71,48 +83,55 @@ project(main) # Include AyonCppApi add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/ext/ayon-cpp-api") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ext/ayon-cpp-api") +include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ext/ayon-cpp-api/ext/ayon-cpp-dev-tools/src/") add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} AyonCppApi) ``` - -#### Build the project - -> I'm using `VS studio` (devenv.exe) on my side. - -```shell -cmake -S . -B build -DJTRACE=0 -devenv build/main.sln /Build -``` - -#### Test Run - -you'd need to set few environment variables. -otherwise, it won't work. - -```shell -set AYON_SERVER_URL= -set AYON_API_KEY= -set AYON_PROJECT_NAME= -set AYON_SITE_ID= # e.g. military-mouse-of-jest - -build\Debug\main.exe -``` - -Expected Output -```shell -my_cpp_project> build\Debug\main.exe -[2024-09-20 15:59:31.541] [info] Loaded AYON_API_KEY and AYON_SERVER_URL -[2024-09-20 15:59:31.542] [info] Found SideId -``` - -:::tip `AYON_SITE_ID` fallback -When skipping setting `AYON_SITE_ID` env variable, the lib will default to file named `site_id` *without an extension*. -located at `%AppData%/Roaming/AYON/site_id` on windows. -::: - -
+ + + +*This example is brought from: [test_cpp_api](https://github.com/MustafaJafar/ayon-recipes/tree/main/test_cpp_api).* + + +### Build And Run Commands + +- **Fetch AYON CPP Repo** + ``` + cd ext + git clone https://github.com/ynput/ayon-cpp-api.git --recurse-submodules + ``` +- **Build CPP**
+ `ayon-cpp-api` repo provides python script to do the hard lifting for you. + ``` + cd ext\ayon-cpp-api + python AyonBuild.py --setup + python AyonBuild.py --runStageGRP CleanBuild + ``` +- **Build CPP Example** + ``` + rmdir /s /q build + cmake -S . -B build -DJTRACE=0 + cmake --build ./build --config Debug -j12 + ``` +- **Run CPP Example** + ``` + build\Debug\main.exe + ``` +- **Example Output** + ``` + Enter a project: Animal_Logic_ALab + Enter a uri to resolve: ayon+entity://Animal_Logic_ALab/assets/book_encyclopedia01?product=usdAsset&version=v002&representation=usd + The resolved path: H:\AYON\projects\Animal_Logic_ALab\assets\book_encyclopedia01\publish\usd\usdAsset\v002\ALA_book_encyclopedia01_usdAsset_v002.usd + ``` +- **Example contents of `log.json`** + ```json + {"timestamp":"2025-04-07 13:24:48.368","level":"info","Thread Id":"5832","Process Id":"13732","message":"Connected to the Ayon server : 200"} + {"timestamp":"2025-07-18 18:14:56.645","level":"warning","Thread Id":"34840","Process Id":"40096","message":"asset identification cant be generated {"entities":[],"error":"Invalid scheme: h","uri":"H:\\AYON\\projects\\Animal_Logic_ALab\\assets\\book_encyclopedia01\\publish\\usd\\usdAsset\\v002\\ALA_book_encyclopedia01_usdAsset_v002.usd"}"} + {"timestamp":"2025-07-18 18:16:17.522","level":"warning","Thread Id":"564","Process Id":"37400","message":"asset identification cant be generated {"entities":[{}],"uri":"ayon+entity://Animal_Logic_ALab/assets/book_encyclopedia01?product=usdAsset"}"} + {"timestamp":"2025-07-18 18:16:48.017","level":"warning","Thread Id":"33948","Process Id":"38436","message":"asset identification cant be generated {"entities":[],"error":"Invalid scheme: ","uri":"{root[work]}/Animal_Logic_ALab/assets/book_encyclopedia01/work/lookdev/ALA_book_encyclopedia01_lookdev_v001.hip"}"} + ``` ## Learn More