A quick article on how to create a middleware script which accepts the values from a submitted HTML form and sends it to a server on another domain for processing. This applies to Linux Apache MySQL and PHP (LAMP) setups.
A customer wanted to connect their Mobile App to a third-party API. The third-party only accepts requests from a static and permitted IP address. If the end-user were to make the request, then their own IP address would be the one checked against, and it just wouldn't be manageable to add every new user's IP address to their service. The request has to come from a permitted server with a single IP address.
It's likely that you already know how to submit a HTML form to a server via your Mobile application so the following will only document the process of sending data under the server IP address. We're going to use a PHP script with the cURL function to receive and send the data. cURL is a standard feature on most LAMP setups. If not you can install it from here: http://curl.haxx.se/download.html
An article on how to declare an XML element as NULL using the attribute "xsi:nil". I'm going to use a very short example by providing a blank date of birth value:
- -- What I have:
- <DATE_OF_BIRTH />
- -- What I want:
- <DATE_OF_BIRTH xsi:nil="true" />
- <DATE_OF_BIRTH_EUROPEANFORMAT xsi:nil="true" />
Outputting from SITS:Vision to our staging environment, the application would only output blank values using single tags so we had to find a place to introduce it. On strings this has little worth, but on dates which could be NULL, this was necessary (unless we interpreted dates as strings which we don't want to do):
|all||Specifies that the child elements can appear in any order. Each child element can occur 0 or 1 time|
|annotation||Specifies the top-level element for schema comments|
|any||Enables the author to extend the XML document with elements not specified by the schema|
|anyAttribute||Enables the author to extend the XML document with attributes not specified by the schema|
|appinfo||Specifies information to be used by the application (must go inside annotation)|
|attribute||Defines an attribute|
|attributeGroup||Defines an attribute group to be used in complex type definitions|
|choice|| Allows only one of the elements contained in the |
|complexContent||Defines extensions or restrictions on a complex type that contains mixed content or elements only|
|complexType||Defines a complex type element|
|documentation||Defines text comments in a schema (must go inside annotation)|
|element||Defines an element|
|extension||Extends an existing simpleType or complexType element|
|field||Specifies an XPath expression that specifies the value used to define an identity constraint|
|group||Defines a group of elements to be used in complex type definitions|
|import||Adds multiple schemas with different target namespace to a document|
|include||Adds multiple schemas with the same target namespace to a document|
|key||Specifies an attribute or element value as a key (unique, non-nullable, and always present) within the containing element in an instance document|
|keyref||Specifies that an attribute or element value correspond to those of the specified key or unique element|
|list||Defines a simple type element as a list of values|
|notation||Describes the format of non-XML data within an XML document|
|redefine||Redefines simple and complex types, groups, and attribute groups from an external schema|
|restriction||Defines restrictions on a simpleType, simpleContent, or a complexContent|
|schema||Defines the root element of a schema|
|selector||Specifies an XPath expression that selects a set of elements for an identity constraint|
|sequence||Specifies that the child elements must appear in a sequence. Each child element can occur from 0 to any number of times|
|simpleContent||Contains extensions or restrictions on a text-only complex type or on a simple type as content and contains no elements|
|simpleType||Defines a simple type and specifies the constraints and information about the values of attributes or text-only elements|
|union||Defines a simple type as a collection (union) of values from specified simple data types|
|unique||Defines that an element or an attribute value must be unique within the scope|
XSD Restrictions/Facets for Datatypes
|enumeration||Defines a list of acceptable values|
|fractionDigits||Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero|
|length||Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero|
|maxExclusive||Specifies the upper bounds for numeric values (the value must be less than this value)|
|maxInclusive||Specifies the upper bounds for numeric values (the value must be less than or equal to this value)|
|maxLength||Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero|
|minExclusive||Specifies the lower bounds for numeric values (the value must be greater than this value)|
|minInclusive||Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)|
|minLength||Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero|
|pattern||Defines the exact sequence of characters that are acceptable|
|totalDigits||Specifies the maximum number of digits allowed. Must be greater than zero|
|whiteSpace||Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled|
There are a lot of articles & posts out there that cover the same topic, but as this took me the good part of an hour just to find out, I'm posting it here so I never have to look for it again.
A client changed their website domain address and wanted any person visiting the old domain to be redirected to the new domain.
I warned that a 301 site gets removed from the Google directory and true to form Google have removed it. Not sure why nobody believed me when I raised the alarm but hey-ho.
I'm going to show you how to do this with a .htaccess file:
A note for myself on some code to convert a string of two names into a string made up of the first name and then using the initial of the second name.
- -- What I have
- John Smith
- -- What I want
- John S.
- Fred B.