构建API的其余部分

既然我们已经介绍了构建REST API的基础知识,现在是时候为拍卖系统构建API的其余部分了。

在这些笔记中,我将带你通过一个设计过程,我用它来确定我的拍卖API需要什么操作。这个设计过程通过构建一系列用户故事来进行,这些用户故事为用户需要与系统进行的交互建模。每个用户故事将由一组目标组成,这些目标是用户想要完成的任务。为了实现这些目标,我将设置HTTP URL、动词对,并描述我们将向服务器来回传递的对象的结构。

在前两次讲座中,我们已经实现了一个用户故事,用户故事围绕创建一个新的用户帐户,然后随后登录到该帐户。这些说明将引导您了解系统需要支持的其他用户场景。

设置配置文件

在用户建立了一个帐户后,我们将为他们提供机会来建立一个关于他们自己的更多信息的配置文件。

下面是Java类的一组成员变量,显示了进入配置文件的信息:

公共类配置文件{私有字符串用户;私有字符串全名;private String email;私用串电话;私人航运;私有字符串;私有布尔ispublic;}

如果用户选择提供地址信息作为其概要文件的一部分,那么该信息将作为Shipping对象嵌入到概要文件中。当客户赢得拍卖并希望将物品运送到与其配置文件地址不同的地址时,相同的对象类型将在稍后的系统中重用。Shipping类的结构如下:

公共类Shipping{私有int Shipping;私有字符串用户;private String displayname;私有字符串addressone;私有字符串addresst2;private String city;私有字符串状态;private String zip;}

要在服务器上存储概要信息,用户首先要向URL提交一个概要对象

/用户/ {id} /概要文件

其中{id}是用户id。同样,用户可以通过使用相同的URL执行GET操作来查看他们的配置文件。如果用户选择更新他们的概要信息,他们可以使用相同的URL执行PUT操作。

创建拍卖

当一个卖家想要创建一个拍卖,他们将开始张贴一个拍卖对象的URL

/拍卖

下面是这个Auction对象的结构:

public class Auction {private String auctionid;私人字符串卖家;私有字符串项;私有字符串描述;私有字符串imageurl;私人储备;private String打开;private String关闭;private List<String> tags;}

由于auctionid将由系统自动生成,因此该字段不需要出现在用户发布的对象中。

卖家可以通过对URL执行GET操作来获取他们创建的赢博体育拍卖的列表

/用户/ {userid} /拍卖

其中{userid}是用户id。

拍卖竞价

要在拍卖上出价,用户将希望通过查看可用的拍卖开始。

对URL执行GET操作

/拍卖

将获取赢博体育当前活动拍卖的列表,即开盘值小于或等于今天的日期而收盘值大于或等于今天的日期的拍卖。

要搜索带有特定标签的拍卖,用户可以对URL执行GET操作

/拍卖吗?标签= <标记>

要放置一个拍卖出价的用户将张贴一个出价对象的URL

/ / {auctionid} /投标拍卖

其中{auctionid}是他们想要竞标的拍卖的id。

下面是Bid类的结构:

public class Bid {int Bid;私人串拍卖;私人竞标者;私人投标;私有字符串输入;}

由于bidid将由系统自动生成,因此该字段不需要出现在post对象中。这里投标人是用户的用户id放置投标。

要查看特定拍卖的赢博体育当前出价列表,用户可以对URL执行GET操作

/ / {auctionid} /投标拍卖

赢得拍卖和航运产品

一旦拍卖结束,我们将希望通过采购和运输过程的工作。正如我在第一节课中解释的,这是一个复杂的、多步骤的过程。

一旦用户赢得了一场拍卖,他们就会想知道自己赢了。为了获取这些信息,他们可以对URL执行GET操作

/用户/ {userid} /提供

这将获取要购买的报价列表。要约对象采用以下形式

public类Offer {String purchaseid;字符串auctionid;int bidid;int数量;}

这里auctionid是他们赢得的拍卖id, amount是他们出价的多少。如果他们想要查看拍卖的细节,他们可以通过使用URL进行GET来获取完整的拍卖细节

/拍卖/ {auctionid}

为了接受这个提议,用户将向URL POST一个OfferResponse对象

/采购/ offerresponse

一个OfferResponse采用这种形式

公共类OfferResponse{字符串purchaseid;字符串标识;布尔接受;int shippingid;}

如果买家想拒绝报价,他们只需将accept字段设置为false。这将导致他们的中标从系统中删除,给新用户购买物品的机会。

如果买方已经接受了报价,他们将被期望提供一个送货地址作为回应的一部分。要查看他们已经输入到系统中的赢博体育送货地址的列表,用户可以对URL执行GET操作

/用户/ {userid} /航运

其中{userid}是用户id。

要创建一个新的Shipping条目,用户可以将一个新的Shipping对象POST到同一个URL。

接下来,我们将期望拍卖的卖家为这个接受的报价提供航运估计。

要获取接受的报价卖家列表,请使用URL进行GET操作

/用户/ {userid} /接受

这将返回一个Sale对象列表。Sale对象采用如下形式

公共类Sale{字符串purchaseid;字符串auctionid;int bidid;船舶航运;}

这里bidid是中标者的id。要输入运费估计,卖家将POST一个ShippingCharge对象到URL

/采购/ billshipping

ShippingCharge对象的形式为

公共类ShippingCharge{字符串purchaseid;int电荷;}

其中收费是建议的运费。

买方可以通过对URL执行GET操作来查看赢博体育销售清单

/用户/ {userid} /宣传

这将返回Bill对象的列表,其形式为

公共类Bill{字符串purchaseid;字符串auctionid;int bidid;int数量;int shippingcharge;船舶航运;字符串跟踪;}

为了支付账单,用户将POST一个BillResponse对象到URL

/采购/ billresponse

一个BillResponse对象采用如下形式

公共类BillResponse{字符串purchaseid;字符串标识;布尔接受;}

要查看已全额支付的销售列表,卖家将使用URL进行GET操作

/用户/ {userid} /出售

这将返回赢博体育已确认销售的Bill对象列表。卖家应提供出货确认为赢博体育售出的项目。为了提供这种确认,他们将POST一个ShippingConfirmation对象到URL

/采购/ confirmshipping

ShippingConfirmation对象采用以下形式

公共类ShippingConfirmation{字符串purchaseid;字符串跟踪;}

一旦将跟踪号码输入系统,买家就可以通过使用URL再次执行GET操作来查看它们

/用户/ {userid} /出货

这将返回一个Bill对象列表,该列表现在将包含任何帐单、付款和发货物品的跟踪号。