Чтобы делать запросы к API OpenAI из браузера, вы обычно должны использовать ключи типа "secret", но внедрение этих ключей напрямую в фронтенд небезопасно, так как это может позволить недобросовестным пользователям использовать ваш ключ. Поэтому работа с API напрямую из браузера не рекомендуется.
Вместо этого правильный способ использовать API OpenAI заключается в создании серверного прокси, который будет общаться с API OpenAI и использовать ваш секретный ключ API, скрывая его от клиентского браузера. Этот серверный прокси может быть реализован на различных платформах, таких как Node.js, Python с Flask или Django, Ruby on Rails и др.
Вот базовый пример того, как это можно сделать с использованием Node.js и Express:
```javascript
const express = require('express');
const fetch = require('node-fetch');
const app = express();
const OPENAI_API_URL = 'https://api.openai.com/v1/threads';
const OPENAI_SECRET_KEY = 'your-secret-api-key';
app.use(express.json());
app.get('/api/threads', async (req, res) => {
try {
const response = await fetch(OPENAI_API_URL, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${OPENAI_SECRET_KEY}`,
},
});
if (!response.ok) {
throw new Error('Сетевой ответ был не ok.');
}
const data = await response.json();
res.status(200).json(data);
} catch (error) {
res.status(500).json({ message: error.message });
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
```
Этот сервер будет принимать GET-запросы по пути `/api/threads` и проксировать их к API OpenAI, скрывая ваш секретный ключ от пользователей браузера.
После того как сервер будет настроен, вы можете сделать запрос к этому пути с клиентской строны, используя JavaScript:
```javascript
fetch('/api/threads')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```
Обратите внимание, что вам нужно будет определить политики CORS на вашем сервере, если вы собираетесь делать запросы к серверу не с origin-хоста.