Newbe.Claptrap 框架入门,第二步 —— 创建项目

接上一篇 《Newbe.Claptrap 框架入门,第一步 —— 开发环境准备》,我们继续了解如何创建一个 Newbe.Claptrap 项目。

安装项目模板

打开控制台运行以下命令来安装最新的项目模板:

dotnet new --install Newbe.Claptrap.Template

安装完毕后,可以在安装结果中查看到已经安装的项目模板。

newbe.claptrap.template安装完毕

创建项目

选择一个位置,创建一个文件夹,本示例选择在D:\Repo下创建一个名为HelloClaptrap的文件夹。该文件夹将会作为新项目的代码文件夹。

打开控制台,并且将工作目录切换到D:\Repo\HelloClaptrap。然后运行以下命令便可以创建出项目:

dotnet new newbe.claptrap --name HelloClaptrap

通常来说,我们建议将D:\Repo\HelloClaptrap创建为 Git 仓库文件夹。通过版本控制来管理您的源码。

启动项目

接下来,我们使用命令行启动项目。将命令行切换到C:\Repos\HelloClaptrap\HelloClaptrap,运行以下命令:

tye run

启动之后可以在 tye dashboard 上查看到项目模板包含的所有项目:

newbe.claptrap service

tye dashboard 的地址通常为 http://localhost:8000, 若端口被占用将自动使用其他端口,可以查看命令行上的提示,以得到当前具体的地址。

我们可以在如上图所示的界面上找到helloclaptrap-webapi服务的运行地址。例如,上图所示,其终结点地址为http://localhost:14285。

因此,我们使用浏览器打开该地址,以查看 swagger 界面。

在 swagger 页面上,尝试调用/AuctionItems/{itemId}/statusAPI:

newbe.claptrap AuctionItems

服务返回 200 说明当前服务各个组件已经正常启动。

体验项目

使用项目模板创建的项目实际上是一个模拟拍卖竞价业务的程序。

拍卖竞价是一个典型的可能具有并发请求需要处理的业务场景。使用 Newbe.Claptrap 可以很简单的解决该问题。后续的文档中我们将连续使用该业务场景进行演示,因此,此处进行一下简单的业务场景说明。

业务规则

业务规则大致如下:

  1. 每个拍卖品由一个唯一的 itemId

  2. 拍卖品只能在一段时间内进行竞价拍卖

  3. 拍卖品有一个起始拍卖价格

  4. 所有的竞拍者都拥有一个唯一的 userId

  5. 竞拍者在拍卖时间段内可以无限次对拍卖品进行出价,只要其出价大于当前最高出价,即可算作有效出价,并成为该拍卖品目前的得标人

  6. 需要记录所有成功出价的详细情况,包括出价时间,出价额,出价人。

拍卖品的状态如下:

  • 0 Planned 等待开拍

  • 1 OnSell 正在拍卖

  • 2 Sold 已经拍出

  • 3 UnSold 流拍

API 设计

为了最简单的演示效果,本样例设计了以下这些 API :

  • GET /AuctionItems/{itemId}/status 获取指定拍卖品当前的竞价状态

  • GET /AuctionItems/{itemId} 获取指定拍卖品的详细信息

  • POST /AuctionItems 对指定的拍卖品进行出价

下面我们使用一个简单的场景来体验一下这些 API 的效果。

寻找当前在拍的拍卖品

由于拍卖品的状态受到时间的影响,为了让开发者可以在任何时候都可以找到各种状态的拍卖品,项目中使用了一些基于时间的算法,来生成所有状态的拍卖品。

开发者可以使用 0/1/2/3 四个 itemId 调用GET /AuctionItems/{itemId}/status获取拍卖品当前的状态。

其中至少存在一个状态为 1 OnSell 的拍卖品。为了后续方便说明,我们假设其 itemId 为 1。

查看拍卖品的详细信息

使用 GET /AuctionItems/{itemId} 可以查询到拍卖品的详细信息。例如,我们使用 itemId 为 1 进行查询,可能可以得到如下结果:

{"state": {"biddingRecords": null,"basePrice": 10,"startTime": "2021-02-27T12:59:12.673013+08:00","endTime": "2021-02-27T16:59:12.673013+08:00"}
}

以上结果说明:

  • 该拍卖品的起拍价格为 basePrice 10

  • 竞拍时间段为 startTime - endTime 时间的时段

  • 当前的竞拍记录 biddingRecords 为空

其中时段可能由于启动项目模板的时间发生变化,视具体项目启动时间而定。

尝试出价

接下来,我们调用POST /AuctionItems尝试对当前在拍的拍卖品进行出价,调用并传入参数如下:

{"userId": 1,"price": 36524,"itemId": 1
}

参数说明如下:

  • 出价人 userId 为 1

  • 出价为 36524

  • 拍卖品为 itemId 1

这将得到结果:

{"success": true,"userId": 1,"auctionItemStatus": 1,"nowPrice": 36524
}

返回结果表明:

  • success 出价成功

  • 出价人 userId 为 1

  • 最新出价为 36524

  • 拍卖品当前状态为 1 OnSell

然后在使用 GET /AuctionItems/{itemId} 便可以查看到当前最新的拍卖品情况:

{"state": {"biddingRecords": {"36524": {"userId": 1,"price": 36524,"biddingTime": "2021-02-27T07:31:09.8954519+00:00"}},"basePrice": 10,"startTime": "2021-02-27T12:59:12.673013+08:00","endTime": "2021-02-27T16:59:12.673013+08:00"}
}

以上结果说明:

  • 出价记录已更新,添加了最新的一条竞拍详情。

这样便完成了最简单的出价演示。

开发者可以自行尝试更多不同的状态和参数体验以上 API 的基础用法。例如,出价小于当前最高出价,对非再拍商品进行出价等等操作。

停止项目

若想要停止当前正在运行的模板项目。只要在刚才运行tye run的控制台上使用键盘按下Ctrl+C即可停止正在运行的程序。

小结

本篇我们了解了安装项目模板和使用项目模板的基本步骤。

下一步,我们将介绍项目模板中包含的主要内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TTL expired in transit--问题篇~

今天在做东航事件处理时&#xff0c;发现远程登陆DMS服务器后&#xff0c;ping所有三层交换机<cisco 3550> 都发现一个现象:TTL expired in transit&#xff1b;如图1所示:之后用tracert -d IP 后&#xff0c;如图2所示:如图可见&#xff0c;可以清楚的发现&#xff0c…

【干货】机器学习中样本比例不平衡的处理方法

推荐阅读时间&#xff1a;5min~12min主要内容&#xff1a;机器学习中样本比例不平衡的处理方法在机器学习中&#xff0c;常常会遇到样本比例不平衡的问题&#xff0c;如对于一个二分类问题&#xff0c;正负样本的比例是 10:1。这种现象往往是由于本身数据来源决定的&#xff0c…

网易10万+课程迅速刷屏又迅速被封:“违规”背后的思考

从16号晚上8点前后上线到17号早上&#xff0c;不到16小时&#xff0c;网易云课堂的“年度运营大课”&#xff0c;已售出超10万份&#xff08;售价39元&#xff09;&#xff0c;可以说是非常现象级了。而取得如此现象级成果的背后&#xff0c;至少一个核心驱动力源自于一个“一级…

一起学习设计模式--03.工厂方法模式

简单工厂模式虽然简单&#xff0c;但是存在一个很严重的问题&#xff1a;由于静态工厂方法是根据传入的参数不同来创建不同的产品的&#xff0c;所以当系统中需要引入新产品时&#xff0c;就需要修改工厂类的源代码&#xff0c;这将违背开闭原则。为了实现增加新产品而不修改原…

求对一组数据进行排名的算法

为什么80%的码农都做不了架构师&#xff1f;>>> 我现在有一组数据&#xff0c;比如&#xff1a;25&#xff0c;19&#xff0c;29&#xff0c;3 怎么用java获得这组数据的排名&#xff0c;获得排名的结果应该是3&#xff0c;2&#xff0c;4&#xff0c;1 如果有相等…

一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南

在众多经典的贝叶斯方法中&#xff0c;马尔可夫链蒙特卡洛&#xff08;MCMC&#xff09;由于包含大量数学知识&#xff0c;且计算量很大&#xff0c;而显得格外特别。本文反其道而行之&#xff0c;试图通过通俗易懂且不包含数学语言的方法&#xff0c;帮助读者对 MCMC 有一个直…

使用 xunit 编写测试代码

使用 xunit 编写测试代码Introxunit 是 .NET 里使用非常广泛的一个测试框架&#xff0c;有很多测试项目都是在使用 xunit 作为测试框架&#xff0c;不仅仅有很多开源项目在使用&#xff0c;很多微软的项目也在使用 xunit 来作为测试框架。Get Started在 xunit 中不需要标记测试…

白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟

如果在这个人工智能的时代&#xff0c;作为一个有理想抱负的程序员&#xff0c;或者学生、爱好者&#xff0c;不懂深度学习这个超热的话题&#xff0c;似乎已经跟时代脱节了。但是&#xff0c;深度学习对数学的要求&#xff0c;包括微积分、线性代数和概率论与数理统计等&#…

IdentityServer4密码模式

Oatuth2协议的密码模式介绍用户会将用户名&#xff0c;密码给予客户端&#xff0c;但是客户端不保存此信息&#xff0c;客户端带着用户的密码请求认证服务器&#xff0c;认证服务器密码验证通过后后将token返回给客户端。 这里借用下阮一峰老师画的图&#xff08;博客地址》htt…

IKVM 编程武林之.NET派的北冥神功

为什么80%的码农都做不了架构师&#xff1f;>>> 在编程武林中&#xff0c;Java派成立较久底子雄厚&#xff0c;虽然掌门人Sun已经老态龙钟&#xff0c;镇山之技的Java语言已经被后进的新秀.NET派的C#压得喘不过气来&#xff0c;甚至有时候Sun老大还得跑到.NET派潜伏…

php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID

关键字 微信公众平台 自定义菜单 OpenID作者&#xff1a;方倍工作室原文&#xff1a;http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html在这篇微信公众平台开发教程中&#xff0c;我们将介绍如何在自定义菜单中获得用户的OpenID。本篇开发教程的实质是微信自定义菜…

mysql优化的重要参数 key_buffer_size table_cache

MySQL服务器端的参数有很多&#xff0c;但是对于大多数初学者来说&#xff0c;众多的参数往往使得我们不知所措&#xff0c;但是哪些参数是需要我们调整的&#xff0c;哪些对服务器的性能影响最大呢&#xff1f;对于使用Myisam存储引擎来说&#xff0c;主要有key_buffer_size和…

代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton

据说「软件工程师」这个名词就是她发明的玛格丽特站在阿波罗计算机指导手册 (AGC) 的源代码程序列表旁边&#xff0c;这些材料摞起来比她的人还要高。图片来源&#xff1a;Margaret Hamilton缔造传奇的人似乎有个共性&#xff1a;本来没想干一票大的&#xff0c;甚至她的打算都…

每扇区2048字节的U盘乱码的数据恢复

每扇区2048字节的U盘乱码的数据恢复一个U盘&#xff0c;FAT32分区&#xff0c;显示的是乱码&#xff0c;远程看对方的U盘参数&#xff0c;发现一个比较怪的现象&#xff1a;每扇区字节数是2048字节&#xff08;U盘量产时可能是以光盘形式形成的&#xff09;&#xff0c;对方传的…

为什么有些大公司的效率弱爆了?

阅读本文大概需要5分钟。上周写了篇文章&#xff1a;为什么有些大公司的技术弱爆了&#xff1f;不少朋友读完后表示有同感&#xff0c;还有一些朋友在读者群探讨大公司效率问题。有几个朋友谈到自己的公司效率低下&#xff0c;做一件事需要层层审批&#xff0c;并且遇到各种阻力…

2018年最有前景的十大行业

我们想和大家分享的是围绕十个行业、数十个细分领域&#xff0c;在2018年发展趋势展望&#xff1a;01 消费新零售——平台级近半年&#xff0c;新零售已被多次提及。但在年终盘点我们再次提到这个“热词”&#xff0c;是因为该领域未来还将出现超级平台级的公司。新零售未来更多…

昨日搬至办公室的书籍

由于家里地方小&#xff0c;总有一部分书籍需要跟着我辗转至各公司。其中一些公司只能让我放抽屉&#xff08;地方小&#xff09;甚至地板上&#xff0c;而有一些公司就能让我把书都摞桌子上。昨天下午我特地来了一次办公室&#xff0c;只为搬运书籍。灭霍霍&#xff0c;可真是…

如何在 ASP.Net Core 中对接 WCF

在 REST API 出现之前&#xff0c;SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议&#xff0c;虽然现在 REST 大行其道&#xff0c;但在平时开发中总会遇到对接第三方服务采用的是基于SOAP协议的场景&#xff0c;在这篇文章中&#xff0c;我们将会讨论如何…

什么是区块链? 区块链的入门教程~

区块链&#xff08;blockchain&#xff09;是眼下的大热门&#xff0c;新闻媒体大量报道&#xff0c;宣称它将创造未来。可是&#xff0c;简单易懂的入门文章却很少。区块链到底是什么&#xff0c;有何特别之处&#xff0c;很少有解释。下面&#xff0c;我就来尝试&#xff0c;…

linux提升权限命令提示符,win10如何直接使用命令提示符提高管理员权限?

原标题&#xff1a;win10如何直接使用命令提示符提高管理员权限?在使用普通的命令提示符时&#xff0c;如果遇到需要管理员权限的操作&#xff0c;往往需要重新打开一个具有管理员权限的命令提示符页面进行操作。而在Linux操作系统中&#xff0c;可以通过输入su来获取系统最高…