Javascript Node.js填充JSON请求的最佳实践 简介

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

我目前正在使用UPS费率API为客户创建一个发货插件,以便在结帐期间(除其他事项外)获得客户发货费用的估算

我过去曾简要使用过Nodejs,但这将是我第一次在生产环境中使用它,我希望确保我使用的是该应用程序的最佳实践

代码 以下是我必须向UPS的API端点发送的请求,以获得发货估算:

{
   "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
}