動機(jī)

構(gòu)建服務(wù)器端邏輯是移動應(yīng)用開發(fā)中較為復(fù)雜的一部分。目前,React Native開發(fā)者通常需要在多個(gè)代碼庫之間切換,或者依賴第三方服務(wù)來處理服務(wù)器端邏輯。

通過將API路由直接集成到React Native項(xiàng)目中,Expo CLI和Expo Router為開發(fā)者提供了一種無縫的解決方案,減少了上下文切換,簡化了開發(fā)流程。


API路由語法

API路由可以通過在項(xiàng)目的app目錄中添加一個(gè)以+api.ts為后綴的新文件來創(chuàng)建。開發(fā)者可以在該文件中導(dǎo)出以下HTTP方法GET、POSTPUT、PATCH、DELETE、HEADOPTIONS。當(dāng)請求的方法與導(dǎo)出的方法匹配時(shí),相應(yīng)的函數(shù)將會被執(zhí)行。

以下是一個(gè)與OpenAI安全交互的示例:

// app/generate+api.ts
import { ExpoRequest, ExpoResponse } from 'expo-router/server';

export async function POST(req: ExpoRequest): Promise {
  const { prompt } = await req.json();  const json = await fetch(
    'https://api.openai.com/v1/engines/text-davinci-003/completions',
    {
      headers: {
        'Content-Type': 'application/json',
        Authorization: Bearer ${process.env.OPENAI_API_KEY ?? ''},
      },
      method: 'POST',
      body: JSON.stringify({
        prompt,
        max_tokens: 100,
      }),
    }
  ).then(res => res.json());  return ExpoResponse.json(json);
}

開發(fā)者可以通過.env文件安全地加載機(jī)密信息,例如:

# .env.development
OPENAI_API_KEY=xxxxxx

路由和請求處理

上述API路由文件(app/generate+api.ts)可以通過以下URL訪問:http://localhost:8081/generate。開發(fā)者可以使用npx expo啟動服務(wù),并通過以下命令發(fā)起POST請求:

$ curl -X POST -H "Content-Type: application/json" 
  -d '{"prompt":"Hello, my name is Evan"}' 
  http://localhost:8081/generate

Expo Router增強(qiáng)了本地應(yīng)用中的URL和window.location對象,支持使用相對URL進(jìn)行請求。例如:

const json = await fetch('/generate').then(res => res.json());

此外,開發(fā)者還可以通過Expo CLI的隧道支持,從公共URL提供服務(wù):

npx expo start --tunnel

中間件和運(yùn)行時(shí)環(huán)境

一個(gè)新的包@expo/server將被引入,用于提供運(yùn)行服務(wù)器端邏輯所需的中間件和運(yùn)行時(shí)環(huán)境。


打包機(jī)制

服務(wù)器端代碼將通過Expo CLI和Metro bundler進(jìn)行打包。這意味著服務(wù)器端代碼可以使用與客戶端代碼相同的語言特性。

每個(gè)API路由都會被打包成獨(dú)立文件,存儲在dist/_expo目錄中。


請求與響應(yīng)對象

新的請求和響應(yīng)對象ExpoRequestExpoResponse將被引入。這些對象基于WinterCG規(guī)范,并包含額外的屬性以兼容Expo Router。它們的設(shè)計(jì)靈感來源于Remix、SvelteKit和Next.js 13。

以下是一個(gè)錯(cuò)誤處理的示例:

// app/blog/[post].ts
import { ExpoRequest, ExpoResponse } from 'expo-router/server';

export async function GET(request: ExpoRequest, { post }: Record) {
  if (!post) {
    return new ExpoResponse('No post found', {
      status: 404,
      headers: {
        'Content-Type': 'text/plain',
      },
    });
  }
  return ExpoResponse.json({ ... });
}

本地請求支持

Expo Router將支持在本地環(huán)境中使用相對網(wǎng)絡(luò)請求,從而簡化跨Web和原生平臺的開發(fā)。例如:

fetch('/generate');

在開發(fā)環(huán)境中,Expo會自動解析服務(wù)器地址,但在生產(chǎn)環(huán)境中,開發(fā)者需要明確指定服務(wù)器的URL。未來,開發(fā)者可以通過Expo Router配置插件在app.json中定義生產(chǎn)目標(biāo)。


生產(chǎn)環(huán)境支持

與靜態(tài)模式不同,API路由支持動態(tài)路由(如app/[post].tsx),無需額外配置generateStaticParams。此外,這種模式還可以減少構(gòu)建時(shí)的工作量,加快導(dǎo)出速度。

API路由功能可以部署到大多數(shù)網(wǎng)絡(luò)托管服務(wù)商。首個(gè)Pull Request將支持Express和HTTP服務(wù)器,未來將擴(kuò)展支持更多服務(wù)商。


總結(jié)

API路由的引入為Expo應(yīng)用提供了服務(wù)器端邏輯的強(qiáng)大支持。這不僅為開發(fā)者帶來了更高效的開發(fā)體驗(yàn),還為跨平臺身份驗(yàn)證和服務(wù)器端渲染等功能奠定了基礎(chǔ)。未來,Expo還計(jì)劃支持React服務(wù)器組件,進(jìn)一步提升開發(fā)效率。

開發(fā)者的反饋對于完善此功能至關(guān)重要。歡迎提出您的建議和意見!

原文鏈接: https://blog.expo.dev/rfc-api-routes-cce5a3b9f25d
熱門推薦
一個(gè)賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業(yè)工程師共享工作效率翻倍的秘密
返回頂部
上一篇
Deno + Express REST API 教程(第二部分):測試、基準(zhǔn)與 Docker 部署指南
下一篇
如何對 API 進(jìn)行逆向工程:優(yōu)勢和工具
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产欧美日韩在线视频| 91麻豆国产自产在线观看| 成人av资源在线| 一本久久精品一区二区| 欧美亚洲综合一区| 亚洲欧美一区二区三区久本道91 | 国产日韩欧美一区二区三区综合| 中文字幕一区二区三区精华液| 亚洲一卡二卡三卡四卡无卡久久 | 91香蕉视频mp4| 久久综合成人精品亚洲另类欧美 | 精品女同一区二区| 一区二区三区中文字幕| 91激情在线视频| 久久精品国产99久久6| 久久久蜜桃精品| 日韩一区和二区| 亚洲一区在线观看免费观看电影高清 | 日本欧美久久久久免费播放网| 久久久久国产免费免费| 欧美视频在线观看一区二区| 国产成人综合精品三级| 亚洲一区二区三区中文字幕在线| 精品伦理精品一区| 91精品国产免费| 不卡视频一二三| 国产一区二区免费看| 国产精品成人在线观看| 亚洲精品高清在线观看| 国产欧美日韩亚州综合 | 粉嫩在线一区二区三区视频| 亚洲一区在线视频观看| 国产亚洲一本大道中文在线| av成人免费在线观看| 狠狠色狠狠色合久久伊人| 性做久久久久久久免费看| 亚洲一区二区三区国产| 国产午夜亚洲精品理论片色戒| 99久久精品国产毛片| 国产精品自拍三区| 亚洲免费观看高清完整版在线 | 国内成+人亚洲+欧美+综合在线| 精彩视频一区二区| 色综合视频一区二区三区高清| 91精品国产综合久久精品图片| 精品蜜桃在线看| 悠悠色在线精品| 麻豆精品国产91久久久久久| 精品一区二区在线免费观看| 岛国av在线一区| 欧美电影影音先锋| 国产精品看片你懂得| 亚洲一区在线观看网站| 国产乱人伦偷精品视频不卡| 国产曰批免费观看久久久| 亚洲成人777| 亚洲国产毛片aaaaa无费看| 在线观看中文字幕不卡| 亚洲小少妇裸体bbw| 99re这里只有精品视频首页| 中文字幕亚洲精品在线观看| 亚洲一级二级在线| 久久精品亚洲精品国产欧美| 91视频www| 欧美一区二区三区在线视频| 久久久一区二区三区捆绑**| 国产成人免费网站| 午夜精品久久久久久久久久久| 成人禁用看黄a在线| 国产精品热久久久久夜色精品三区 | 麻豆freexxxx性91精品| 午夜精品免费在线观看| 精品日韩av一区二区| 91蜜桃视频在线| 国产精品1区2区3区| 亚洲午夜久久久久中文字幕久| 国产拍欧美日韩视频二区| 欧美精品在线观看一区二区| 欧美区一区二区三区| 911精品国产一区二区在线| 风间由美中文字幕在线看视频国产欧美 | 国产精品国产三级国产aⅴ中文| 91亚洲男人天堂| 蜜臀av性久久久久av蜜臀妖精| 久久久久国色av免费看影院| 亚洲成人综合网站| 91丨九色porny丨蝌蚪| 欧美最猛黑人xxxxx猛交| 91麻豆.com| 精品少妇一区二区三区免费观看| 久久亚洲二区三区| 一区二区免费在线播放| 蜜桃一区二区三区在线| 成人av网在线| 欧美老年两性高潮| 国产午夜精品久久久久久久 | 亚洲人成7777| 久久久激情视频| 日韩一区二区电影网| 豆国产96在线|亚洲| 亚洲妇熟xx妇色黄| 91视频观看视频| 中文字幕一区二区三区在线播放| 偷拍与自拍一区| 日本道精品一区二区三区| 亚洲欧美日本在线| 国产福利91精品一区| 国产精品色在线| 欧美丰满高潮xxxx喷水动漫| 亚洲手机成人高清视频| 91黄视频在线| 日韩一区欧美二区| 日韩美女视频在线| 国产原创一区二区| 久久久久国产精品人| 国产传媒日韩欧美成人| 亚洲成人av中文| 久久久久国产精品人| 床上的激情91.| 亚洲女爱视频在线| 在线播放日韩导航| 国产99久久久国产精品潘金网站| 中文字幕 久热精品 视频在线| 欧美三级韩国三级日本一级| 久草在线在线精品观看| 亚洲中国最大av网站| 国产亚洲欧美色| 欧美大黄免费观看| 9i在线看片成人免费| 麻豆国产一区二区| 亚洲欧洲中文日韩久久av乱码| 精品国产精品网麻豆系列| 在线成人av网站| 欧美视频一区二区三区四区 | 国产精品久久久久久久久久久免费看| 国产精品你懂的在线| 久久这里只有精品视频网| 久久综合九色综合欧美就去吻| 日韩欧美国产一二三区| 91精品国产综合久久久久久漫画| 在线视频综合导航| 欧日韩精品视频| 国产美女久久久久| 精品一区二区在线视频| 国内外成人在线| 国产伦精品一区二区三区免费| 日韩不卡手机在线v区| 成人综合激情网| 色婷婷久久久综合中文字幕| 色老头久久综合| 欧美韩国日本一区| 一区二区三区电影在线播| 亚洲成人av电影在线| 国产福利不卡视频| 国产一区二区在线观看视频| 成熟亚洲日本毛茸茸凸凹| 8x8x8国产精品| 国产精品国产三级国产普通话99 | 成人永久免费视频| 欧美日韩久久久一区| 中文字幕一区在线观看| 国产在线不卡视频| 99国产精品国产精品久久| 91精品午夜视频| 亚洲bt欧美bt精品777| 国产69精品久久久久777| 欧美激情综合五月色丁香| 成人h精品动漫一区二区三区| 欧美一区二区在线视频| 亚洲va欧美va人人爽午夜| 一本一道久久a久久精品| 亚洲女性喷水在线观看一区| 91浏览器在线视频| 一区二区三区中文在线| 成人av电影在线观看| 亚洲在线视频免费观看| 欧美性感一区二区三区| 色婷婷亚洲婷婷| 粉嫩13p一区二区三区| 欧美一级欧美一级在线播放| 欧美国产一区二区在线观看| 亚洲一区二区三区四区在线| 国产成人午夜精品影院观看视频| 欧美日韩国产免费| 日本不卡在线视频| 日韩欧美久久一区| 国产一区二区三区四区在线观看| 欧美变态tickling挠脚心| 日韩美女久久久| 91精品啪在线观看国产60岁| 麻豆久久久久久| 国产亚洲精品7777| 在线观看av不卡| 国产91在线观看丝袜| 午夜欧美2019年伦理| 欧美韩国日本不卡| 欧美成人精品福利| 欧美三区在线视频| 天堂资源在线中文精品| 日日欢夜夜爽一区|