首页
学习
活动
专区
圈层
工具
发布

使用 GraphQL 和 Ballerina 操作多个数据源

上述操作的信息来源如下: 书名、出版年份、ISBN、作者姓名、作者国籍——从数据库获取; 平均评分和评分计数——通过 ISBN 查询 Google Books API。...Google Books API 获取到的数据的记录类型。...在创建所需的记录之前,需要分析一下根据指定 ISBN 从 Google Books API 获取的的 JSON 响应消息的格式。它返回一个 JSON 对象,其中包含了一个“items”的数组。...现在添加一个 HTTP 客户端,用于从 Google Books API 获取所需的数据。你需要导入 ballerina/http 模块,并按照如下方式创建客户端。...你可以看到这里的一些评级是“null”,因为 Google Books API 调用返回的一些 JSON 响应没有包含这些信息。

3.2K20

老板与秘书的故事理解CORS(跨域),真的超级简单

也会直接联系老板 从现实生活到软件工程访问,我们做一个对应: 给办公室打电话的人——前端应用程序 秘书-浏览器 老板-后端应用程序 访问的逐步顺序如下: 一旦前端应用程序尝试向后端 API 发送请求,浏览器就会向后端...API 发出所谓的预请求,并询问允许的选项:谁可以调用 API 以及可以发出什么类型的请求 API 发送带有此类选项的响应,并且(可选)包括浏览器应缓存这些依赖设置 如果前端应用程序及其尝试发出的请求位于允许列表内.../index.html") } 运行这段代码,前端html将运行为http://localhost:3333 使用浏览器访问,得到如下页面,打开F12调试,在文本框中输入书名,点击Add: 得到了与文章开始时类似的报错...您可能已经发现,我们的后端代码根本没有提及 CORS。确实如此,到目前为止我们还没有实现任何 CORS 配置。但这对于浏览器来说并不重要:它无论如何都会尝试发出预检请求。...Not Allowed,这是有道理的,因为我们还没有定义我们后端的 OPTIONS 端点。

41510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    REST API 设计最佳实践:如何构建、设计和使用 API ?

    但是,我也曾遇到过一些让 REST 蒙羞的 API 例子,错误使用 HTTP 状态码、纯文本响应、不一致的模式、插入端点中动词......于是,我开始使用: POST: /buckets/ 然后一切都顺利进行了。API没有修复,但希望您可以防止消费者遇到此类问题。...了解401未授权和403禁止之间的区别 如果我每看到一次开发人员甚至有经验的架构师搞砸这个问题就能得到一个25美分硬币……在处理REST API中的安全错误时,很容易弄混错误是与身份验证还是授权(又称权限...根据不同情况,以下是我的备忘单,用于了解我正在处理什么问题: 消费者没有提供身份验证凭据吗?他们的SSO令牌是否无效/超时? 401 未授权。...在Node中,Restify似乎也是一个很好的选择,尽管我还没有尝试过。我强烈建议您试一试这些框架,它们将帮助您构建美观、优雅且设计精良的REST API。

    2.1K40

    协作场景:用AI快速开发一个Python Flask API

    目标是用AI加速代码生成和调试,确保API高效、可靠,减少手动写SQL的时间。...我选了简单方案,保持单连接并加错误重试。Docker支持:我问:“为Flask项目生成Dockerfile和docker-compose.yml。”.../books.db:/app/books.db关键步骤初始化项目:用Cursor生成Flask和SQLite代码,10分钟搭建API框架。...错误处理:加try-catch和错误响应,API更健壮。Docker部署:用AI生成的Docker配置,30分钟完成部署。测试验证:用Postman压测,50并发下响应稳定在100ms。...提示要明确:像“加SQL注入防护”比“优化API”更能得到精准建议。验证不可少:AI代码得用压测确认,我加了日志测响应时间。学习是核心:AI的解释让我搞懂SQLite并发问题,开发更自信。

    24410

    接口测试之RESTful案例应用

    就像之前编写的案例代码,如果当查询书籍不存在的时候,它的返回信息是什么,修改书的时候,必须传的请求参数并没有传进去,它的错误信息又是什么,不同的场景,如果使用同一种错误信息来表示,会影响最终的体验。...比如参数author为空,我们更加希望得到的是author请求参数不能为空的错误信息,如果是name为空,希望得到的是name请求参数不能为空的错误信息。...(book[0]) return jsonify({'status': 1009, 'msg': '删除书籍成功'}) api.add_resource(Books,'/v1/api.../books') api.add_resource(Book,'/v1/api/book/') if __name__ == '__main__': app.run(...本套课程的目标是从零基础开始,系统的讲解使用主流的开发语言Python在接口自动化测试方面的案例应用和实战。

    71921

    Vue3 Composition-Api + TypeScript + 新型状态管理模式探索。

    ,使用场景的也很少,所以之前我也并没有往状态管理的方向去想。...,我建立了src/context/books.ts import { provide, inject, computed, ref, Ref } from '@vue/composition-api';..., loading }; }, components: { Books, }, }); 复制代码 这个页面需要初始化books的数据,并且从inject中拿到setBooks...在setup里引入了一个useAsync函数,我编写它的目的是为了管理异步方法前后的loading状态,看一下它的实现。...的Hook的区别对比的时候,我对于Vue3的Hook甚至有了一些盲目的崇拜,但是真正使用下来发现,虽然不需要我们再去手动管理依赖项,但是由于Vue的响应式机制始终需要非原始的数据类型来保持响应式,所带来的一些心智负担也是需要注意和适应的

    3.3K20

    Vue3 Composition-Api + TypeScript + 新型状态管理模式探索。

    ,使用场景的也很少,所以之前我也并没有往状态管理的方向去想。...import VueCompositionApi from '@vue/composition-api' Vue.use(VueCompositionApi) context 编写 按照刚刚的思路,我建立了..., loading }; }, components: { Books, }, }); 这个页面需要初始化 books 的数据,并且从 inject 中拿到 setBooks...其实这个方法在 Hook 内部会传给 watch 方法作为第一个参数,由于 props 是响应式的, 所以对props.books的读取自然也能收集到依赖,从而在外部传入的books发生变化的时 候,可以通知...和 React 的 Hook 的区别 对比的时候,我对于 Vue3 的 Hook 甚至有了一些盲目的崇拜,但是真正使用下来发现,虽 然不需要我们再去手动管理依赖项,但是由于 Vue 的响应式机制始终需要非原始的数据类

    39210

    【译】构建RESTful API的13种最佳实践

    Facebook、GitHub、Google 以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API 仍然是服务和消费数据的最佳选择之一。...设计 RESTful API 的最佳实践是什么?从理论上讲,任何人都可以在不到五分钟的时间内快速启动数据 API——无论是 Node.js,Golang 还是 Python。...现在我们得到: POST api.com/authors GET api.com/authors/3 如果我们想访问 ID 为 3 的作者曾经写过的所有书籍怎么办?...因此,你将调用以下端点:GET api.com/authors。 当你读取请求时,你无法判断 API 响应是否只包含一个或所有作者。因此,API 端点应该使用复数资源。...12.文档化你的 API 最后,写文档!我不是在开玩笑,这仍然是传递你新开发的 API 知识最简单的方法之一。

    2.4K10

    Vue3 Composition-Api + TypeScript + 新型状态管理模式探索。

    ,所以之前我也并没有往状态管理的方向去想。..., loading }; }, components: { Books, }, }); 这个页面需要初始化 books 的数据,并且从 inject 中拿到 setBooks...其实这个方法在 Hook 内部会传给 watch 方法作为第一个参数,由于 props 是响应式的, 所以对props.books的读取自然也能收集到依赖,从而在外部传入的books发生变化的时 候,可以通知...和 React 的 Hook 的区别 对比的时候,我对于 Vue3 的 Hook 甚至有了一些盲目的崇拜,但是真正使用下来发现,虽 然不需要我们再去手动管理依赖项,但是由于 Vue 的响应式机制始终需要非原始的数据类...型来保持响应式,所带来的一些心智负担也是需要注意和适应的。

    94512

    13个构建RESTful API的最佳实践

    现在我们得到: POST api.com/authors GET api.com/authors/3 假如我们想访问ID为3的作者写过的所有书,怎么办?...因此,你会调用以下端点:GET api.com/authors 。 当你阅读请求时,你无法判断API响应将只包含一个或所有作者。出于这个原因,API端点应该使用复数资源。...此外,我想检索名为Michiel的作者。请求看起来长这样:api.com/authors?search=Michiel 。 幸运的是,许多API项目都具有内置的搜索、分页、过滤和排序功能。...API版本 我并不经常看到这种情况,但这是对API进行版本化的最佳实践。这是向用户传达破坏性更改的有效方法。...我没有在开玩笑。这仍然是传递关于你新开发的API知识的最简单的方法之一。 尽管你的API遵循了所有针对RESTful API的最佳实践,但仍然值得你花时间来记录各种元素。

    1.8K20

    Python进阶39-drf框架(一)

    (客户端提供改变的属性) DELETE :从服务器删除资源 过滤,通过在url上传参的形式传递搜索条件 https://api.example.com/v1/zoos?...401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。...django原生)的as_view,还禁用了 csrf 认证 3) 在父类的as_view中dispatch分发请求走的又是APIView的dispatch 4) 完成任务方法交给视图类的请求函数处理,得到请求的响应结果...self.perform_content_negotiation(request, force=True) 点进去 # 获得解析类对象 renderers = self.get_renderers() 点进去 # 从视图类中得到...views.Book.as_view() api/books/(?

    4.8K30

    API测试用例的编写

    在API的自动化测试维度中,测试维度分为两个维度,一个是单独的对API的验证,客户端发送一个请求后,服务端得到客户端的请求并且响应回复给客户端;另外一个维度是基于业务场景的测试,基于业务场景的也就是说编编写的...API的测试用例是基于产品的业务逻辑,关于这点在我出版的书《Python自动化测试实战》测试案例实战中都有丰富的代码案例,这里就不详细的再说明。...不管工具还是代码,对产品完整性的测试,都要考虑产品的业务逻辑,也就是产品的场景,而如何通过API的自动化测试方式来达到产品的业务场景的测试,在单元测试框架的视频里面我特别的说到了七个点,每个点都举了案例...,其中最核心的一个点就是编写的每个测试用例都必须得有断言同时基于API的测试要基于产品的业务逻辑来进行,而单纯的测试API是没有多少意义的,比如一个登录的业务场景,登录接口好的就能够证明登录的业务场景是好的吗...,但是主要可以考虑这么几点,分别是创建书籍信息,查看创建的书籍信息,对创建的书籍信息进行修改,和最后删除创建的书籍信息,那么编写这样的API测试用例的编写,也可以从两个维度思考,第一个维度是基于业务场景

    1.3K22

    Rust Search Extension两周年,发布1.0版!

    大家好, Rust Search Extension是我从2018年开始开发的浏览器插件,方便Rust开发者在浏览器地址栏快速搜索官方文档、内置属性、crates和错误码等。...) 得到了Vercel.com和Jetbrains的赞助(欢迎其他公司赞助,我会把贵司的logo放置在仓库和官网底部??)...国内阿里巴巴、蚂蚁金服、字节跳动、华为等Rust工程师在使用 国外没有具体去了解,猜测应该有Mozilla、Google、Facebook的工程师也在使用吧 接下来看一下1.0版的主要功能: 支持在线更新索引...比如每次Rust发布一个版本加了新的API,就需要发布新版本更新索引,否则搜不到新的API;再比如Top 20K的crate,每天都有大量crate更新版本,甚至Top 20K的crate排名也在不断变化...(Top 20K crate,books,labels等等) stable和nightly 标准库索引的更新 每当我们在线查看Rust官方文档的时候,插件每天会自动同步最新的标准库索引,用户是没有任何感知的

    62520

    API测试用例的编写

    在API的自动化测试维度中,测试维度分为两个维度,一个是单独的对API的验证,客户端发送一个请求后,服务端得到客户端的请求并且响应回复给客户端;另外一个维度是基于业务场景的测试,基于业务场景的也就是说编编写的...API的测试用例是基于产品的业务逻辑,关于这点在我出版的书《Python自动化测试实战》测试案例实战中都有丰富的代码案例, 这里就不详细的再说明。...不管工具还是代码,对产品完整性的测试,都要考虑产品的业务逻辑,也就是产品的场景,而如何通过API的自动化测试方式来达到产品的业务场景的测试,在单元测试框架的视频里面我特别的说到了七个点,每个点都举了案例..., 其中最核心的一个点就是编写的每个测试用例都必须得有断言同时基于API的测试要基于产品的业务逻辑来进行,而单纯的测试API是没有多少意义的,比如一个登录的业务场景,登录接口好的就能够证明登录的业务场景是好的吗...,但是主要可以考虑这么几点,分别是创建书籍信息,查看创建的书籍信息,对创建的书籍信息进行修改,和最后删除创建的书籍信息, 那么编写这样的API测试用例的编写,也可以从两个维度思考,第一个维度是基于业务场景

    98520

    API测试用例的编写

    在API的自动化测试维度中,测试维度分为两个维度,一个是单独的对API的验证,客户端发送一个请求后,服务端得到客户端的请求并且响应回复给客户端;另外一个维度是基于业务场景的测试,基于业务场景的也就是说编编写的...不管工具还是代码,对产品完整性的测试,都要考虑产品的业务逻辑,也就是产品的场景,而如何通过API的自动化测试方式来达到产品的业务场景的测试,在单元测试框架的视频里面我特别的说到了七个点,每个点都举了案例...,其中最核心的一个点就是编写的每个测试用例都必须得有断言同时基于API的测试要基于产品的业务逻辑来进行,而单纯的测试API是没有多少意义的,比如一个登录的业务场景,登录接口好的就能够证明登录的业务场景是好的吗...({'status':1001,'msg':'删除成功'}) api.add_resource(BooksApi,'/v1/api/books',endpoint='/v1/api/books') api.add_resource...,但是主要可以考虑这么几点,分别是创建书籍信息,查看创建的书籍信息,对创建的书籍信息进行修改,和最后删除创建的书籍信息,那么编写这样的API测试用例的编写,也可以从两个维度思考,第一个维度是基于业务场景

    98640
    领券