我最近接手了一个 Perl 客户端的维护工作,该客户端包装了一个 Shipping web 服务。该项目在其初始状态中使用直接映射到 Web 服务对象的 Moo 对象,例如有 Parcel、Address 和 Label 类。
在 API 的 v2 中,您必须将代表这些对象之一的所有数据发布到 Web 服务,然后您会返回该对象的唯一 ID,该 ID 必须用于所有后续事务。
例如,如果我发布:
{ name => 'Hunter',
street => '121 Baker St',
city => 'New York',
state => 'NY',
}
我会取回相同的数据,但包含一个 id:
{ id => 'adr_xq1411',
name => 'Hunter',
street => '121 Baker St',
city => 'New York',
state => 'NY',
}
我无法决定如何创建这些对象。目前,我有这个构造函数,它执行实际的 POST 以获取 ID,然后修改当前对象:
sub BUILD {
my $self = shift;
my $requestor = Net::Easypost::Request->new;
my $resp = $requestor->post(
'/addresses',
$self->serialize( [qw(street1 street2 city state zip)] )
);
# save the id for this Address from Easypost
$self->id( $resp->{id} );
return $self;
}
在 Perl 中包装 Web 服务时,这是一种常见的方法吗?似乎理想的方法是 POST 到 Web 服务并一次创建 Address 对象的所有属性,但是在 Moo(se) 中,一旦您使用 BUILD 方法,该对象就已经被创建了。
我对包装 Web 服务的习语不是很熟悉,还有比这更简单的方法吗?
任何建议/意见/建议将不胜感激。