• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Data fetching in '/apps/[appName]' route in open source ACI.dev platform.

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
16,064
Баллы
155
In this article, we are going to review API layer in

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

route in

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. We will look at:


  1. Locating the /apps/GITHUB route


  2. apps/GITHUB folder


  3. API Layer in apps/GITHUB/page.tsx

This /apps/GITHUB route loads a page that looks like below:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



ACI.dev is the open source platform that connects your AI agents to 600+ tool integrations with multi-tenant auth, granular permissions, and access through direct function calling or a unified MCP server.

Locating the /apps/GITHUB route


ACI.dev is open source, you can find their code at

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. This codebase has the below project structure:


  1. apps


  2. backend


  3. frontend
frontend


ACI.dev is built using Next.js, I usually confirm this by looking for

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

at the root of the frontend folder.

And there is a src folder and app folder inside this src folder. This means this project is built using app router.

From here on, it makes it super easy to locate /apps/GITHUB route since this is going to be a folder, according to how app router works in Next.js


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



You will find the

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

in the above image. [appName] here indicates that this is dynamic route. There won’t be any GITHUB folder, instead this is a param accessible in apps/[appName]/page.tsx


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



apps/[appName] folder


apps folder has the below structure:


  1. Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    - file

It contains only 1 file, page.tsx.

API layer in apps/[appName]


This below code is picked from

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.


useEffect(() => {
async function loadData() {
try {
const apiKey = getApiKey(activeProject);

const app = await getApp(appName, apiKey);
setApp(app);

const functions = await getFunctionsForApp(appName, apiKey);
setFunctions(functions);

const appConfig = await getAppConfig(appName, apiKey);
setAppConfig(appConfig);
} catch (error) {
console.error("Error fetching app data:", error);
}
}

loadData();
}, [appName, activeProject]);
getApiKey:


This below code is imported from

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




import { Project } from "@/lib/types/project";

export function getApiKey(project: Project, agentId?: string): string {
if (
!project ||
!project.agents ||
project.agents.length === 0 ||
!project.agents[0].api_keys ||
project.agents[0].api_keys.length === 0
) {
throw new Error(
`No API key available in project: ${project.id} ${project.name}`,
);
}
if (agentId) {
const agent = project.agents.find((agent) => agent.id === agentId);
if (!agent) {
throw new Error(`Agent ${agentId} not found in project ${project.id}`);
}
return agent.api_keys[0].key;
}
return project.agents[0].api_keys[0].key;
}
getApp



Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

is defined as shown below:


export async function getApp(
appName: string,
apiKey: string,
): Promise<App | null> {
const apps = await getApps([appName], apiKey);
return apps.length > 0 ? apps[0] : null;
}
getFunctionsForApp


export async function getFunctionsForApp(
appName: string,
apiKey: string,
): Promise<AppFunction[]> {
const params = new URLSearchParams();
params.append("app_names", appName);

const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/v1/functions?${params.toString()}`,
{
method: "GET",
headers: {
"X-API-KEY": apiKey,
},
},
);

if (!response.ok) {
throw new Error(
`Failed to fetch functions: ${response.status} ${response.statusText}`,
);
}

const functions = await response.json();
return functions;
}

This above code is picked from

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

About me:


Hey, my name is

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. I study large open-source projects and create content about their codebase architecture and best practices, sharing it through articles, videos.

Configure features such as Changesets, Supabase authentication in your Next.js project using

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Business enquiries — ramu@thinkthroo.com

My Github —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



My website —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



My YouTube channel —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Learning platform —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Codebase Architecture —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Best practices —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Production-grade projects —

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



References:



  1. Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.





  2. Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.





  3. Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу