Javascript Node.js填充JSON请求的最佳实践 简介
我目前正在使用UPS费率API为客户创建一个发货插件,以便在结帐期间(除其他事项外)获得客户发货费用的估算 我过去曾简要使用过Nodejs,但这将是我第一次在生产环境中使用它,我希望确保我使用的是该应用程序的最佳实践 代码 以下是我必须向UPS的API端点发送的请求,以获得发货估算:Javascript Node.js填充JSON请求的最佳实践 简介,javascript,json,node.js,rest,ups,Javascript,Json,Node.js,Rest,Ups,我目前正在使用UPS费率API为客户创建一个发货插件,以便在结帐期间(除其他事项外)获得客户发货费用的估算 我过去曾简要使用过Nodejs,但这将是我第一次在生产环境中使用它,我希望确保我使用的是该应用程序的最佳实践 代码 以下是我必须向UPS的API端点发送的请求,以获得发货估算: { "UPSSecurity":{ "UsernameToken":{ "Username":"Your User Id", "Password":"Your
{
"UPSSecurity":{
"UsernameToken":{
"Username":"Your User Id",
"Password":"Your Password"
},
"ServiceAccessToken":{
"AccessLicenseNumber":"Your Access License"
}
},
"RateRequest":{
"Request":{
"RequestOption":"Rate",
"TransactionReference":{
"CustomerContext":"Your Customer Context"
}
},
"Shipment":{
"Shipper":{
"Name":"Shipper Name",
"ShipperNumber":"Shipper Number",
"Address":{
"AddressLine":[
"Address Line ",
"Address Line ",
"Address Line "
],
"City":"City",
"StateProvinceCode":"State Province Code",
"PostalCode":"Postal Code",
"CountryCode":"US"
}
},
"ShipTo":{
"Name":"Ship To Name",
"Address":{
"AddressLine":[
"Address Line ",
"Address Line ",
"Address Line "
],
"City":"City",
"StateProvinceCode":"State Province Code",
"PostalCode":"Postal Code",
"CountryCode":"US"
}
},
"ShipFrom":{
"Name":"Ship From Name",
"Address":{
"AddressLine":[
"Address Line ",
"Address Line ",
"Address Line "
],
"City":"City",
"StateProvinceCode":"State Province Code",
"PostalCode":"Postal Code",
"CountryCode":"US"
}
},
"Service":{
"Code":"03",
"Description":"Service Code Description"
},
"Package":{
"PackagingType":{
"Code":"02",
"Description":"Rate"
},
"Dimensions":{
"UnitOfMeasurement":{
"Code":"IN",
"Description":"inches"
},
"Length":"5",
"Width":"4",
"Height":"3"
},
"PackageWeight":{
"UnitOfMeasurement":{
"Code":"Lbs",
"Description":"pounds"
},
"Weight":"1"
}
},
"ShipmentRatingOptions":{
"NegotiatedRatesIndicator":""
}
}
}
}
看到要填写的字段数量,在坚持低耦合和高内聚的基本软件工程原则的同时,最好的方法是什么
我是否应该做一些类似于下面的代码示例的事情,但针对每个字段部分
const shipToAddr1 = "A street with number"
const shipToAddr2 = "Line 2 with number"
const shipToAddr3 = "The third line"
const shipToCity = "Boston"
const shipToStateProvinceCode = "12"
const shipToPostalCode = "01970"
const shipToCountryCode = "US"
const shipToName = "Bob Wallace"
const packageLength = "10"
const packageWidth = "5"
const packageHeight = "18"
const PackageWeight = "12"
//See above code snippet
var jsonRequest = {...}
function writeShipToContents(json, shipToName, shipToAddr1, shipToAddr2,
shipToAddr3){
json.RateRequest.Shipment.ShipTo.Name = shipToName
json.RateRequest.Shipment.ShipTo.Address.AddressLine = [
shipToAddr1,
shipToAddr2,
shipToAddr3
]
}
function writeShipFromContents(json){
...
}
function writePackageDetails(json){
...
}
function writeShipmentRequest(json){
writeShipToContents(json)
writeShipFromContents(json)
writePackageDetails(json)
...
return json
}
writeShipmentRequest(jsonRequest)
我的直觉是上面的代码有很多地方是错误的,例如让每个函数更改引用的对象,而不是返回一个包含填充内容的新对象;让函数使用全局变量填充信息;总而言之,这似乎是一个简单任务的大量代码
应用程序将接受一个POST请求,其信息在示例中为const
,然后返回装运估算的结果
我应该为每个字段创建一个字典,传递json和字典内容,让函数查找字典项,填充json并返回结果吗?使用最佳实践的第一件事是使用对象文本,而不是污染全局命名空间
`const anyObject = {
// your object
}`
第二件事是使用函数式编程技术
`function( anyObject, argsToDo) {
// do what every you want to anyObject with other functions
// anyObject could contain all the properties you need to write
// () => setWhatever(anyObject)
// or return new anyObjectWithArgsToDo();
}`
您可以使用该方法动态编写JSON对象的字段,以提交示例伪代码:
`function writeFields( anyObject, fieldsObject ) {
let i = 0;
foreach( anyObject as value ) {
value = fieldsObject[I];
i++;
}`
您可以组合对象来保存其他对象JSON代表JavaScript对象符号,这样您就可以将它们作为参数传递给函数,使用函数对它们执行操作,使用对象作为参数创建新对象等等。这里有一个关于函数式编程的Wiki链接。使用现代编程技术就是使用一层抽象和封装,看起来好像是在编写实现,而不是编写执行任务的可重用代码。编写代码的最佳方式是使其能够与任何对象一起工作,这涉及到函数编程技术的使用,其中函数不关心其参数的状态。范例
`function writeSomeObject ( object, property, value) {
object[${property}] = ${value}; // use back ticks
// that allow dynamic use of arguments
}`
我希望这会有所帮助,不要用不必要的编程范例来过度思考这一点。根据您的评论,这是一个结构从未改变的对象的简单创建。就这样对待它 如果您的任务是根据值创建Javascript对象并在POST请求中发送,只需使用简短的符号创建一个Javascript对象:
const upsPostBody = {
property: value
}
对整个对象执行此操作,例如(摘录):
将值分配给对象后,将对象作为主体传递给POST方法。在提供的JSON中,这些是唯一必需的字段吗?或者您会使用不同的键进行不同的查找?->这个JSON结构会用于同一个请求吗?是的,这正是我用来执行查找的JSON。发送到app server的请求将是包的维度,以及包发送到何处的信息。
const username = 'Your User Id';
const password = 'Your Password';
const accessLicenseNumber: 'Your Access License';
const upsPostBody = {
UPSSecurity:{
UsernameToken: {
Username: username,
Password: password
},
ServiceAccessToken: {
AccessLicenseNumber: accessLicenseNumber
}
}
// Continue for all other keys and values
}