familysearch 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +44 -0
- data/Gemfile +2 -18
- data/README.md +55 -11
- data/Rakefile +7 -27
- data/familysearch.gemspec +23 -82
- data/lib/familysearch.rb +1 -0
- data/lib/familysearch/client.rb +105 -6
- data/lib/familysearch/error.rb +29 -0
- data/lib/familysearch/middleware.rb +2 -0
- data/lib/familysearch/middleware/response/familysearch_errors.rb +22 -0
- data/lib/familysearch/middleware/response/multi_json.rb +22 -0
- data/lib/familysearch/url_template.rb +132 -0
- data/lib/familysearch/version.rb +4 -0
- data/spec/client_spec.rb +102 -1
- data/spec/fixtures/vcr_cassettes/current_user_person_read.yml +503 -0
- data/spec/fixtures/vcr_cassettes/discovery_auth_wrong_creds.yml +403 -0
- data/spec/fixtures/vcr_cassettes/person_by_id.yml +492 -0
- data/spec/fixtures/vcr_cassettes/person_with_relationship.yml +560 -0
- data/spec/url_template_spec.rb +117 -0
- data/workspace/notes/APIDesign.txt +1 -1
- data/workspace/notes/errors.txt +5 -0
- data/workspace/notes/gem_design.txt +7 -0
- metadata +36 -66
- data/VERSION +0 -1
@@ -0,0 +1,29 @@
|
|
1
|
+
module FamilySearch
|
2
|
+
# namespace for all of the errors that will be raised by this gem.
|
3
|
+
module Error
|
4
|
+
# To be raised if there is any problem with an HTTP request, meaning 40x-50x error.
|
5
|
+
class ClientError < StandardError
|
6
|
+
attr_reader :response
|
7
|
+
# Allows raising an error and having the error keep the response object with it for debugging purposes.
|
8
|
+
def initialize(response = {})
|
9
|
+
@response = response
|
10
|
+
end
|
11
|
+
end
|
12
|
+
# Raised if the client cannot successfully authenticate with basic_auth! method.
|
13
|
+
class BadCredentials < ClientError; end
|
14
|
+
#--
|
15
|
+
# Template Related Errors
|
16
|
+
#++
|
17
|
+
|
18
|
+
# Raised if a template is not found on FamilySearch::Client#template call
|
19
|
+
class URLTemplateNotFound < StandardError; end
|
20
|
+
|
21
|
+
# Raised if a get, post, put, or delete method is called on a FamilySearch::URLTemplate that
|
22
|
+
# doesn't support those methods.
|
23
|
+
class MethodNotAllowed < StandardError; end
|
24
|
+
|
25
|
+
# Raised if a parameter is passed to a get (or other method call) on a FamilySearch::URLTemplate object
|
26
|
+
# that doesn't contain that parameter in the template string.
|
27
|
+
class TemplateValueNotFound < StandardError; end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module FamilySearch
|
4
|
+
# Middleware specific to the +familysearch+ gem
|
5
|
+
module Middleware
|
6
|
+
# Handles the raising of errors within the Faraday call stack.
|
7
|
+
class RaiseErrors < Faraday::Response::RaiseError
|
8
|
+
# If a 400-600 error is raised by the HTTP call, raise it within the app.
|
9
|
+
def on_complete(env)
|
10
|
+
case env[:status]
|
11
|
+
when 401
|
12
|
+
# response_values is a method of the RaiseError class
|
13
|
+
raise FamilySearch::Error::BadCredentials, response_values(env)
|
14
|
+
when 400...600
|
15
|
+
raise FamilySearch::Error::ClientError, response_values(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Faraday.register_middleware :response, :familysearch_errors => FamilySearch::Middleware::RaiseErrors
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module FamilySearch
|
5
|
+
module Middleware
|
6
|
+
# Parses the response from JSON into a Hash. This uses the +multi_json+ gem to provide
|
7
|
+
# more flexibility in JSON parser support and to better support other ruby environments such
|
8
|
+
# as JRuby, Rubinius, etc.
|
9
|
+
class MultiJsonParse < Faraday::Response::Middleware
|
10
|
+
dependency do
|
11
|
+
require 'json' unless defined?(::JSON)
|
12
|
+
end
|
13
|
+
|
14
|
+
# The method that has MultiJson parse the json string.
|
15
|
+
def parse(body)
|
16
|
+
MultiJson.load(body)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Faraday.register_middleware :response, :multi_json => FamilySearch::Middleware::MultiJsonParse
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module FamilySearch
|
2
|
+
# Used to make calls on templates that are exposed through the Discovery Resource.
|
3
|
+
#
|
4
|
+
# It wouldn't be expected that a developer would access this class directly, but is the
|
5
|
+
# resulting object of a FamilySearch::Client#template call.
|
6
|
+
#
|
7
|
+
# =Usage:
|
8
|
+
#
|
9
|
+
# To use the URLTemplate, access the template from the FamilySearch::Client object like so:
|
10
|
+
#
|
11
|
+
# client = FamilySearch::Client.new
|
12
|
+
# res = client.template('person').get :pid => 'KWQS-BBQ'
|
13
|
+
# res.body['persons'][0]['id] # => 'KWQS-BBQ'
|
14
|
+
#
|
15
|
+
# For information on which templates are available, see the discovery resource.
|
16
|
+
#
|
17
|
+
# [sandbox] https://sandbox.familysearch.org/.well-known/app-meta.json
|
18
|
+
#
|
19
|
+
# [production] https://familysearch.org/.well-known/app-meta.json
|
20
|
+
#
|
21
|
+
class URLTemplate
|
22
|
+
attr :template, :type, :accept, :allow, :title
|
23
|
+
|
24
|
+
# Instantiate a new FamilySearch::URLTemplate
|
25
|
+
#
|
26
|
+
# *Args* :
|
27
|
+
# - +client+: a FamilySearch::Client object.
|
28
|
+
# - +template_hash+: a hash containing template values from the Discovery Resource.
|
29
|
+
# Example:
|
30
|
+
# {
|
31
|
+
# "template" => "https://sandbox.familysearch.org/platform/tree/persons/{pid}{?access_token}",
|
32
|
+
# "type" => "application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html",
|
33
|
+
# "accept" => "application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml",
|
34
|
+
# "allow" => "HEAD,GET,POST,DELETE,GET,POST",
|
35
|
+
# "title" => "Person"
|
36
|
+
# }
|
37
|
+
# *Returns* :
|
38
|
+
# - +FamilySearch::URLTemplate+ object
|
39
|
+
# *Raises* :
|
40
|
+
# - +FamilySearch::Error::URLTemplateNotFound+: if the template_hash is nil.
|
41
|
+
# This is intended to catch problems if FamilySearch::Client#template method doesn't find
|
42
|
+
# a template and still instantiates this object.
|
43
|
+
#
|
44
|
+
def initialize(client,template_hash)
|
45
|
+
raise FamilySearch::Error::URLTemplateNotFound if template_hash.nil?
|
46
|
+
@client = client
|
47
|
+
@template = template_hash['template']
|
48
|
+
@type = template_hash['type']
|
49
|
+
@accept = template_hash['accept']
|
50
|
+
@allow = template_hash['allow'].split(',').map{|v|v.downcase}
|
51
|
+
@title = template_hash['title']
|
52
|
+
end
|
53
|
+
|
54
|
+
# Calls HTTP GET on the URL template. It takes the +template_values+ hash and merges the values into the template.
|
55
|
+
#
|
56
|
+
# A template will contain a URL like this:
|
57
|
+
# https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}
|
58
|
+
# or
|
59
|
+
# https://sandbox.familysearch.org/platform/tree/persons/{pid}/matches{?access_token}
|
60
|
+
#
|
61
|
+
# The {?person} type attributes in the first example will be passed as querystring parameters. These will automatically be URL Encoded
|
62
|
+
# by the underlying Faraday library that handles the HTTP request.
|
63
|
+
#
|
64
|
+
# The {pid} type attibutes will simply be substituted into the URL.
|
65
|
+
#
|
66
|
+
# *Note*: The +access_token+ parameter doesn't need to be passed here. This should be handled by the FamilySearch::Client's
|
67
|
+
# Authorization header.
|
68
|
+
#
|
69
|
+
# *Args* :
|
70
|
+
# - +template_values+: A Hash object containing the values for the items in the URL template. For example, if the URL is:
|
71
|
+
# https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}
|
72
|
+
# then you would pass a hash like this:
|
73
|
+
# :person => 'KWQS-BBQ'
|
74
|
+
# or
|
75
|
+
# 'person' => 'KWQS-BBQ'
|
76
|
+
# *Returns* :
|
77
|
+
# - +Faraday::Response+ object. This object contains methods +body+, +headers+, and +status+. +body+ should contain a Hash of the
|
78
|
+
# parsed result of the request.
|
79
|
+
# *Raises* :
|
80
|
+
# - +FamilySearch::Error::MethodNotAllowed+: if you call +get+ for a template that doesn't allow GET method.
|
81
|
+
#
|
82
|
+
def get(template_values)
|
83
|
+
raise FamilySearch::Error::MethodNotAllowed unless allow.include?('get')
|
84
|
+
template_values = validate_values(template_values)
|
85
|
+
url = make_url(template_values)
|
86
|
+
params = make_params(template_values)
|
87
|
+
@client.get url, params
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
def value_array
|
92
|
+
template_value_array = []
|
93
|
+
values = @template.scan(/\{([^}]*)\}/).flatten
|
94
|
+
values.each do |value|
|
95
|
+
value.gsub!('?','')
|
96
|
+
template_value_array += value.split(',')
|
97
|
+
end
|
98
|
+
template_value_array
|
99
|
+
end
|
100
|
+
|
101
|
+
def validate_values(template_values)
|
102
|
+
vals = value_array
|
103
|
+
stringified_hash = {}
|
104
|
+
template_values.each do |k,v|
|
105
|
+
stringified_hash[k.to_s] = v
|
106
|
+
raise FamilySearch::Error::TemplateValueNotFound unless vals.include?(k.to_s)
|
107
|
+
end
|
108
|
+
stringified_hash
|
109
|
+
end
|
110
|
+
|
111
|
+
def make_url(template_values)
|
112
|
+
url = @template.gsub(/\{\?[^}]*\}/,'')
|
113
|
+
template_values.each do |k,v|
|
114
|
+
to_replace = "{#{k}}"
|
115
|
+
url.gsub!(to_replace,v)
|
116
|
+
end
|
117
|
+
url
|
118
|
+
end
|
119
|
+
|
120
|
+
def make_params(template_values)
|
121
|
+
to_remove = url_values
|
122
|
+
to_remove.each do |v|
|
123
|
+
template_values.delete(v)
|
124
|
+
end
|
125
|
+
template_values
|
126
|
+
end
|
127
|
+
|
128
|
+
def url_values
|
129
|
+
@template.scan(/\{(\w*)\}/).flatten
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
data/spec/client_spec.rb
CHANGED
@@ -91,7 +91,6 @@ describe FamilySearch::Client do
|
|
91
91
|
it "should make a request " do
|
92
92
|
VCR.use_cassette('discovery') do
|
93
93
|
client.discover!
|
94
|
-
client.discovery.links.fs_identity_v2_login.href.should == 'https://sandbox.familysearch.org/identity/v2/login'
|
95
94
|
client.discovery['links']['fs-identity-v2-login']['href'].should == 'https://sandbox.familysearch.org/identity/v2/login'
|
96
95
|
end
|
97
96
|
end
|
@@ -128,5 +127,107 @@ describe FamilySearch::Client do
|
|
128
127
|
client.basic_auth! 'api-user-1241', '1782'
|
129
128
|
end
|
130
129
|
end
|
130
|
+
|
131
|
+
it "should raise an error if the username or password are incorrect" do
|
132
|
+
VCR.use_cassette('discovery_auth_wrong_creds') do
|
133
|
+
expect {client.basic_auth! 'api-user-1241', '1783' }.to raise_error(FamilySearch::Error::BadCredentials)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should have some response objects on the exception that is raised" do
|
138
|
+
VCR.use_cassette('discovery_auth_wrong_creds') do
|
139
|
+
begin
|
140
|
+
client.basic_auth! 'api-user-1241', '1783'
|
141
|
+
rescue FamilySearch::Error::BadCredentials => bc
|
142
|
+
bc.response[:status].should == 401
|
143
|
+
bc.response[:headers].should be_kind_of(Hash)
|
144
|
+
bc.response[:body].should be_kind_of(Hash)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "get" do
|
151
|
+
def client()
|
152
|
+
unless @client
|
153
|
+
@client = FamilySearch::Client.new(:key => 'WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK' )
|
154
|
+
@client.discover!
|
155
|
+
@client.basic_auth! 'api-user-1241', '1782'
|
156
|
+
end
|
157
|
+
@client
|
158
|
+
end
|
159
|
+
|
160
|
+
# The following specs were put in place to record the VCR cassette so that I could develop on the road...
|
161
|
+
it "should read the current user person" do
|
162
|
+
VCR.use_cassette('current_user_person_read') do
|
163
|
+
person = client.get client.discovery['links']['current-user-person']['href']
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should read a person by ID" do
|
168
|
+
VCR.use_cassette('person_by_id') do
|
169
|
+
person = client.get 'https://sandbox.familysearch.org/platform/tree/persons/KWQX-52J'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
it "gets the persons-with-relationships resource" do
|
174
|
+
VCR.use_cassette('person_with_relationship') do
|
175
|
+
person = client.get 'https://sandbox.familysearch.org/platform/tree/persons-with-relationships?person=KWQX-52J'
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe "template" do
|
181
|
+
def client()
|
182
|
+
unless @client
|
183
|
+
@client = FamilySearch::Client.new(:key => 'WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK' )
|
184
|
+
@client.discover!
|
185
|
+
@client.basic_auth! 'api-user-1241', '1782'
|
186
|
+
end
|
187
|
+
@client
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should take a key as a string and return a FamilySearch::URLTemplate object" do
|
191
|
+
VCR.use_cassette('person_by_id') do
|
192
|
+
client.template('person-template').should be_instance_of(FamilySearch::URLTemplate)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should raise an error if there is no template found for the key" do
|
197
|
+
VCR.use_cassette('person_by_id') do
|
198
|
+
expect {client.template('yodawg-template')}.to raise_error(FamilySearch::Error::URLTemplateNotFound)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should allow you to take -template off of the key attribute" do
|
203
|
+
VCR.use_cassette('person_by_id') do
|
204
|
+
person_template = client.template('person')
|
205
|
+
person_template.should be_instance_of(FamilySearch::URLTemplate)
|
206
|
+
person_template.title.should == "Person"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should allow you to take -query off of the key attribute" do
|
211
|
+
VCR.use_cassette('person_by_id') do
|
212
|
+
person_template = client.template('ancestry')
|
213
|
+
person_template.should be_instance_of(FamilySearch::URLTemplate)
|
214
|
+
person_template.title.should == "Ancestry"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should allow you to use a symbol as the key attribute" do
|
219
|
+
VCR.use_cassette('person_by_id') do
|
220
|
+
person_template = client.template(:ancestry)
|
221
|
+
person_template.should be_instance_of(FamilySearch::URLTemplate)
|
222
|
+
person_template.title.should == "Ancestry"
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should allow you to make a call to a template and get a result" do
|
227
|
+
VCR.use_cassette('person_by_id') do
|
228
|
+
result = client.template('person').get 'pid' => 'KWQX-52J'
|
229
|
+
result.body.should be_kind_of(Hash)
|
230
|
+
end
|
231
|
+
end
|
131
232
|
end
|
132
233
|
end
|
@@ -0,0 +1,503 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://sandbox.familysearch.org/.well-known/app-meta
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/x-fs-v1+json
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v0.8.7
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- Apache-Coyote/1.1
|
23
|
+
Content-Location:
|
24
|
+
- /.well-known/app-meta
|
25
|
+
Cache-Control:
|
26
|
+
- no-transform, max-age=604800
|
27
|
+
X-Processing-Time:
|
28
|
+
- '167'
|
29
|
+
Content-Type:
|
30
|
+
- application/x-fs-v1+json
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Date:
|
34
|
+
- Tue, 26 Mar 2013 15:16:59 GMT
|
35
|
+
Connection:
|
36
|
+
- close
|
37
|
+
body:
|
38
|
+
encoding: US-ASCII
|
39
|
+
string: ! "{\n \"links\" : {\n \"person-change-summary-template\" : {\n
|
40
|
+
\ \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/change-summary{?access_token}\",\n
|
41
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
42
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
43
|
+
\"Person Change Summary\"\n },\n \"person-notes-template\" : {\n \"template\"
|
44
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/notes{?access_token}\",\n
|
45
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
46
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
47
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Notes\"\n },\n \"couple-relationship-note-template\"
|
48
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/notes/{nid}{?access_token}\",\n
|
49
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
50
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
51
|
+
\ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
|
52
|
+
\ \"person-restore-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/restore{?access_token}\",\n
|
53
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
54
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
55
|
+
\ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"couple-relationship-source-reference-template\"
|
56
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/source-references/{srid}{?access_token}\",\n
|
57
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
58
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
59
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Source Reference\"\n },\n
|
60
|
+
\ \"source-description-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/descriptions/{sdid}{?access_token}\",\n
|
61
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
62
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
63
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Source Description\"\n
|
64
|
+
\ },\n \"child-and-parents-relationship-template\" : {\n \"template\"
|
65
|
+
: \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}{?access_token}\",\n
|
66
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
67
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
68
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Child-and-Parents
|
69
|
+
Relationship\"\n },\n \"discussions\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/discussions/discussions\",\n
|
70
|
+
\ \"title\" : \"Discussions\"\n },\n \"child-and-parents-relationship-conclusion-template\"
|
71
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/{role}/conclusions/{cid}{?access_token}\",\n
|
72
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
73
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
74
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"FamilySearch Conclusion\"\n
|
75
|
+
\ },\n \"couple-relationship-conclusion-template\" : {\n \"template\"
|
76
|
+
: \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/conclusions/{cid}{?access_token}\",\n
|
77
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
78
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
79
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Conclusion\"\n },\n
|
80
|
+
\ \"spouse-relationships-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/spouse-relationships{?access_token}\",\n
|
81
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
82
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
83
|
+
\ \"allow\" : \"GET\",\n \"title\" : \"Person Relationships\"\n },\n
|
84
|
+
\ \"person-discussion-references-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/discussion-references{?access_token}\",\n
|
85
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
86
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
87
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Discussion References\"\n
|
88
|
+
\ },\n \"ancestry-query\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/ancestry{?access_token,person,spouse}\",\n
|
89
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
90
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
91
|
+
\"Ancestry\"\n },\n \"current-user\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/users/current\",\n
|
92
|
+
\ \"title\" : \"Current User\"\n },\n \"discussion-template\" :
|
93
|
+
{\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}{?access_token}\",\n
|
94
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
95
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
96
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Discussion\"\n
|
97
|
+
\ },\n \"discussion-comments-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}/comments{?access_token}\",\n
|
98
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
99
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
100
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Comments\"\n },\n
|
101
|
+
\ \"person-source-reference-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/source-references/{srid}{?access_token}\",\n
|
102
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
103
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
104
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Source Reference\"\n },\n
|
105
|
+
\ \"couple-relationship-source-references-template\" : {\n \"template\"
|
106
|
+
: \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/source-references{?access_token}\",\n
|
107
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
108
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
109
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Source References\"\n
|
110
|
+
\ },\n \"child-and-parents-relationship-source-references-template\"
|
111
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/source-references{?access_token}\",\n
|
112
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
113
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
114
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Child-and-Parents Source
|
115
|
+
References\"\n },\n \"person-matches-template\" : {\n \"template\"
|
116
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/matches{?access_token}\",\n
|
117
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
118
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
119
|
+
\"Person Matches\"\n },\n \"parent-relationships-template\" : {\n \"template\"
|
120
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/parent-relationships{?access_token}\",\n
|
121
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
122
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
123
|
+
\"Person Relationships\"\n },\n \"person-matches-query\" : {\n \"template\"
|
124
|
+
: \"https://sandbox.familysearch.org/platform/tree/matches{?access_token,count,q}\",\n
|
125
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
126
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
127
|
+
\"Person Matches Query\"\n },\n \"child-and-parents-relationships\"
|
128
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships\",\n
|
129
|
+
\ \"title\" : \"Child-and-Parents Relationships\"\n },\n \"person-template\"
|
130
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}{?access_token}\",\n
|
131
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
132
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
133
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Person\"\n
|
134
|
+
\ },\n \"source-folder-descriptions-template\" : {\n \"template\"
|
135
|
+
: \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}/descriptions{?access_token,count,start}\",\n
|
136
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
137
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
138
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Source Descriptions in
|
139
|
+
a Folder\"\n },\n \"authorities\" : {\n \"href\" : \"https://sandbox.familysearch.org/authorities\"\n
|
140
|
+
\ },\n \"reservation\" : {\n \"href\" : \"https://sandbox.familysearch.org/reservation\"\n
|
141
|
+
\ },\n \"person-changes-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/changes{?access_token}\",\n
|
142
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
143
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
144
|
+
\"Change History\"\n },\n \"fs-identity-v2-login\" : {\n \"href\"
|
145
|
+
: \"https://sandbox.familysearch.org/identity/v2/login\"\n },\n \"preferred-spouse-relationship-template\"
|
146
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/users/{uid}/preferred-spouse-relationships/{pid}{?access_token}\",\n
|
147
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
148
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
149
|
+
\ \"allow\" : \"HEAD,GET,DELETE,PUT\",\n \"title\" : \"Preferred
|
150
|
+
Relationship\"\n },\n \"descendancy-query\" : {\n \"template\"
|
151
|
+
: \"https://sandbox.familysearch.org/platform/tree/descendancy{?access_token,person,spouse}\",\n
|
152
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
153
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
154
|
+
\"Descendancy\"\n },\n \"couple-relationship-notes-template\" : {\n
|
155
|
+
\ \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/notes{?access_token}\",\n
|
156
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
157
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
158
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Notes\"\n },\n \"folders\"
|
159
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/sources/folders\",\n
|
160
|
+
\ \"title\" : \"Source Folders\"\n },\n \"source-folder-descriptions-trashbin-template\"
|
161
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}/descriptions/trashbin{?access_token}\",\n
|
162
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
163
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
164
|
+
\ \"allow\" : \"POST\",\n \"title\" : \"Trashbin for Source Descriptions
|
165
|
+
in a Folder\"\n },\n \"child-and-parents-relationship-restore-template\"
|
166
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/restore{?access_token}\",\n
|
167
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
168
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
169
|
+
\ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"fs-parent-relationships-template\"
|
170
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/fs-parent-relationships{?access_token}\",\n
|
171
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
172
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
173
|
+
\"FamilySearch Person Relationships\"\n },\n \"http://oauth.net/core/2.0/endpoint/token\"
|
174
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/cis-web/oauth2/v3/token\"\n
|
175
|
+
\ },\n \"http://oauth.net/core/2.0/endpoint/authorize\" : {\n \"href\"
|
176
|
+
: \"https://sandbox.familysearch.org/cis-web/oauth2/v3/authorization\"\n },\n
|
177
|
+
\ \"person-merge-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/merges/{dpid}{?access_token,filter}\",\n
|
178
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
179
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
180
|
+
\ \"allow\" : \"OPTIONS,GET,POST\",\n \"title\" : \"Person Merge\"\n
|
181
|
+
\ },\n \"person-source-references-template\" : {\n \"template\"
|
182
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/source-references{?access_token}\",\n
|
183
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
184
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
185
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Source References\"\n
|
186
|
+
\ },\n \"user-source-folders-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/{uid}/folders{?access_token}\",\n
|
187
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
188
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
189
|
+
\ \"allow\" : \"GET\",\n \"title\" : \"User Source Folders\"\n },\n
|
190
|
+
\ \"discussion-comment-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}/comments/{cmid}{?access_token}\",\n
|
191
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
192
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
193
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Comment\"\n },\n \"person-with-relationships-query\"
|
194
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}\",\n
|
195
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
196
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
197
|
+
\"Person With Relationships\"\n },\n \"child-and-parents-relationship-note-template\"
|
198
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/notes/{nid}{?access_token}\",\n
|
199
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
200
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
201
|
+
\ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
|
202
|
+
\ \"change-restore-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/changes/{chid}/restore{?access_token}\",\n
|
203
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
204
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
205
|
+
\ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"preferred-parent-relationship-template\"
|
206
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/users/{uid}/preferred-parent-relationships/{pid}{?access_token}\",\n
|
207
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
208
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
209
|
+
\ \"allow\" : \"HEAD,GET,DELETE,PUT\",\n \"title\" : \"Preferred
|
210
|
+
Relationship\"\n },\n \"person-note-template\" : {\n \"template\"
|
211
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/notes/{nid}{?access_token}\",\n
|
212
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
213
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
214
|
+
\ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
|
215
|
+
\ \"child-and-parents-relationship-changes-template\" : {\n \"template\"
|
216
|
+
: \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/changes{?access_token}\",\n
|
217
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
218
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
219
|
+
\"Change History\"\n },\n \"child-and-parents-relationship-notes-template\"
|
220
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/notes{?access_token}\",\n
|
221
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
222
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
223
|
+
\ \"allow\" : \"GET,POST\",\n \"title\" : \"Child-and-Parents Notes\"\n
|
224
|
+
\ },\n \"registration\" : {\n \"href\" : \"https://sandbox.familysearch.org/cis-web/pages/registration/registration.html\"\n
|
225
|
+
\ },\n \"persons\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons\",\n
|
226
|
+
\ \"title\" : \"Persons\"\n },\n \"person-search\" : {\n \"template\"
|
227
|
+
: \"https://sandbox.familysearch.org/platform/tree/search{?access_token,context,count,q,start}\",\n
|
228
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
229
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
230
|
+
\"Person Search\"\n },\n \"fs-identity-v2-permission\" : {\n \"href\"
|
231
|
+
: \"https://sandbox.familysearch.org/identity/v2/permission\"\n },\n \"couple-relationship-restore-template\"
|
232
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/restore{?access_token}\",\n
|
233
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
234
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
235
|
+
\ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"source-folder-template\"
|
236
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}{?access_token}\",\n
|
237
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
238
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
239
|
+
\ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Source Box Folder\"\n
|
240
|
+
\ },\n \"child-relationships-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/child-relationships{?access_token}\",\n
|
241
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
242
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
243
|
+
\"Person Relationships\"\n },\n \"couple-relationship-changes-template\"
|
244
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/changes{?access_token}\",\n
|
245
|
+
\ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
|
246
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
247
|
+
\"Change History\"\n },\n \"agent-template\" : {\n \"template\"
|
248
|
+
: \"https://sandbox.familysearch.org/platform/users/agents/{uid}{?access_token}\",\n
|
249
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
250
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
251
|
+
\"Agent\"\n },\n \"child-and-parents-relationship-parent-template\"
|
252
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/{role}{?access_token}\",\n
|
253
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
254
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
255
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Parent Relationship Role\"\n
|
256
|
+
\ },\n \"fs-identity-v2-logout\" : {\n \"href\" : \"https://sandbox.familysearch.org/identity/v2/logout\"\n
|
257
|
+
\ },\n \"fs-child-relationships-template\" : {\n \"template\" :
|
258
|
+
\"https://sandbox.familysearch.org/platform/tree/persons/{pid}/fs-child-relationships{?access_token}\",\n
|
259
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
260
|
+
\ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
|
261
|
+
\"FamilySearch Person Relationships\"\n },\n \"parent-child-relationship-template\"
|
262
|
+
: {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/parent-child-relationships/{caprid}{?access_token}\",\n
|
263
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
264
|
+
\ \"accept\" : \"application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
265
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Relationship\"\n
|
266
|
+
\ },\n \"person-discussion-reference-template\" : {\n \"template\"
|
267
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/discussion-references/{drid}{?access_token}\",\n
|
268
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
269
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
270
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Discussion Reference\"\n
|
271
|
+
\ },\n \"person-conclusion-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/conclusions/{cid}{?access_token}\",\n
|
272
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
273
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
274
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Conclusion\"\n },\n
|
275
|
+
\ \"child-and-parents-relationship-source-reference-template\" : {\n \"template\"
|
276
|
+
: \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/source-references/{srid}{?access_token}\",\n
|
277
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
|
278
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
|
279
|
+
\ \"allow\" : \"DELETE\",\n \"title\" : \"Child-and-Parents Source
|
280
|
+
Reference\"\n },\n \"couple-relationships\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships\",\n
|
281
|
+
\ \"title\" : \"Relationships\"\n },\n \"source-descriptions\" :
|
282
|
+
{\n \"href\" : \"https://sandbox.familysearch.org/platform/sources/descriptions\",\n
|
283
|
+
\ \"title\" : \"Source Descriptions\"\n },\n \"current-user-person\"
|
284
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/current-person\",\n
|
285
|
+
\ \"title\" : \"Current User Person\"\n },\n \"fs-identity-v2-session\"
|
286
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/identity/v2/session\"\n
|
287
|
+
\ },\n \"couple-relationship-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}{?access_token}\",\n
|
288
|
+
\ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
|
289
|
+
\ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
|
290
|
+
\ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Relationship\"\n
|
291
|
+
\ }\n }\n}"
|
292
|
+
http_version:
|
293
|
+
recorded_at: Tue, 26 Mar 2013 15:16:59 GMT
|
294
|
+
- request:
|
295
|
+
method: get
|
296
|
+
uri: https://api-user-1241:1782@sandbox.familysearch.org/identity/v2/login?dataFormat=application/json&key=WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK
|
297
|
+
body:
|
298
|
+
encoding: US-ASCII
|
299
|
+
string: ''
|
300
|
+
headers:
|
301
|
+
Accept:
|
302
|
+
- application/x-fs-v1+json
|
303
|
+
User-Agent:
|
304
|
+
- Faraday v0.8.7
|
305
|
+
Accept-Encoding:
|
306
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
307
|
+
response:
|
308
|
+
status:
|
309
|
+
code: 200
|
310
|
+
message: !binary |-
|
311
|
+
T0s=
|
312
|
+
headers:
|
313
|
+
!binary "U2VydmVy":
|
314
|
+
- !binary |-
|
315
|
+
QXBhY2hlLUNveW90ZS8xLjE=
|
316
|
+
!binary "QXBwLVN2ci1JZA==":
|
317
|
+
- !binary |-
|
318
|
+
MTAwLi0yOQ==
|
319
|
+
!binary "UHJhZ21h":
|
320
|
+
- !binary |-
|
321
|
+
bm8tY2FjaGU=
|
322
|
+
!binary "RXhwaXJlcw==":
|
323
|
+
- !binary |-
|
324
|
+
VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ=
|
325
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
326
|
+
- !binary |-
|
327
|
+
bm8tY2FjaGU=
|
328
|
+
- !binary |-
|
329
|
+
bm8tc3RvcmU=
|
330
|
+
!binary "U2V0LUNvb2tpZQ==":
|
331
|
+
- !binary |-
|
332
|
+
ZnNzZXNzaW9uaWQ9VVNZU0MxMzIwQ0JCOTdFOTY4OTZFMTUzRTU2MzFGQkNF
|
333
|
+
MEM3X25iY2ktMDQ1LTAzNC5kLnVzeXMuZnNnbG9iYWwubmV0OyBQYXRoPS8=
|
334
|
+
!binary "WC1Qcm9jZXNzaW5nLVRpbWU=":
|
335
|
+
- !binary |-
|
336
|
+
MjExNQ==
|
337
|
+
!binary "Q29udGVudC1FbmNvZGluZw==":
|
338
|
+
- !binary |-
|
339
|
+
Z3ppcA==
|
340
|
+
!binary "Q29udGVudC1UeXBl":
|
341
|
+
- !binary |-
|
342
|
+
YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04
|
343
|
+
!binary "Q29udGVudC1MYW5ndWFnZQ==":
|
344
|
+
- !binary |-
|
345
|
+
ZW4tVVM=
|
346
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
347
|
+
- !binary |-
|
348
|
+
MTkw
|
349
|
+
!binary "RGF0ZQ==":
|
350
|
+
- !binary |-
|
351
|
+
VHVlLCAyNiBNYXIgMjAxMyAxNToxNzowMyBHTVQ=
|
352
|
+
!binary "Q29ubmVjdGlvbg==":
|
353
|
+
- !binary |-
|
354
|
+
Y2xvc2U=
|
355
|
+
body:
|
356
|
+
encoding: ASCII-8BIT
|
357
|
+
string: !binary |-
|
358
|
+
H4sIAAAAAAAAADWNywrCMBBF/yVrGyZJH9ZlQ92IuBAXriTasQZKWjqJUIr/
|
359
|
+
bnwUZnMP98ydGXnjA+m+QbaRAKs/2CORaSNjhx1bINu40HUr1uAw4s14bBby
|
360
|
+
xJFs72Jd8oJLEOpzHBTIaJvgH+i8jcq39HMoTnzjzGx8xE7H81ELJUFXVVnU
|
361
|
+
Zb4u81pkqs5yJbaVrkEXF3e92QTSLAGV8oYHmojfqe36q+m4Qx/X/DTgb+P1
|
362
|
+
egNUEvgU4AAAAA==
|
363
|
+
http_version:
|
364
|
+
recorded_at: Tue, 26 Mar 2013 15:17:01 GMT
|
365
|
+
- request:
|
366
|
+
method: get
|
367
|
+
uri: https://sandbox.familysearch.org/platform/tree/current-person
|
368
|
+
body:
|
369
|
+
encoding: US-ASCII
|
370
|
+
string: ''
|
371
|
+
headers:
|
372
|
+
Accept:
|
373
|
+
- application/x-fs-v1+json
|
374
|
+
User-Agent:
|
375
|
+
- Faraday v0.8.7
|
376
|
+
Authorization:
|
377
|
+
- Bearer USYSC1320CBB97E96896E153E5631FBCE0C7_nbci-045-034.d.usys.fsglobal.net
|
378
|
+
Accept-Encoding:
|
379
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
380
|
+
response:
|
381
|
+
status:
|
382
|
+
code: 303
|
383
|
+
message: See Other
|
384
|
+
headers:
|
385
|
+
Server:
|
386
|
+
- Apache-Coyote/1.1
|
387
|
+
Location:
|
388
|
+
- https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99
|
389
|
+
Cache-Control:
|
390
|
+
- no-cache, no-store, no-transform, must-revalidate, max-age=0
|
391
|
+
X-Processing-Time:
|
392
|
+
- '57'
|
393
|
+
Content-Type:
|
394
|
+
- application/x-fs-v1+json
|
395
|
+
Content-Length:
|
396
|
+
- '0'
|
397
|
+
Date:
|
398
|
+
- Tue, 26 Mar 2013 15:17:03 GMT
|
399
|
+
Connection:
|
400
|
+
- close
|
401
|
+
body:
|
402
|
+
encoding: US-ASCII
|
403
|
+
string: ''
|
404
|
+
http_version:
|
405
|
+
recorded_at: Tue, 26 Mar 2013 15:17:02 GMT
|
406
|
+
- request:
|
407
|
+
method: get
|
408
|
+
uri: https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99
|
409
|
+
body:
|
410
|
+
encoding: US-ASCII
|
411
|
+
string: ''
|
412
|
+
headers:
|
413
|
+
Accept:
|
414
|
+
- application/x-fs-v1+json
|
415
|
+
User-Agent:
|
416
|
+
- Faraday v0.8.7
|
417
|
+
Authorization:
|
418
|
+
- Bearer USYSC1320CBB97E96896E153E5631FBCE0C7_nbci-045-034.d.usys.fsglobal.net
|
419
|
+
Accept-Encoding:
|
420
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
421
|
+
response:
|
422
|
+
status:
|
423
|
+
code: 200
|
424
|
+
message: OK
|
425
|
+
headers:
|
426
|
+
Server:
|
427
|
+
- Apache-Coyote/1.1
|
428
|
+
Last-Modified:
|
429
|
+
- Thu, 05 Jul 2012 14:53:55 GMT
|
430
|
+
Etag:
|
431
|
+
- W/"880e71cc487ea5c0b06dd149ec388779b98d2297"
|
432
|
+
Content-Location:
|
433
|
+
- /platform/tree/persons/KW3B-N99
|
434
|
+
Cache-Control:
|
435
|
+
- no-transform, max-age=3600
|
436
|
+
X-Processing-Time:
|
437
|
+
- '45'
|
438
|
+
Content-Type:
|
439
|
+
- application/x-fs-v1+json
|
440
|
+
Transfer-Encoding:
|
441
|
+
- chunked
|
442
|
+
Date:
|
443
|
+
- Tue, 26 Mar 2013 15:17:04 GMT
|
444
|
+
Connection:
|
445
|
+
- close
|
446
|
+
body:
|
447
|
+
encoding: US-ASCII
|
448
|
+
string: ! "{\n \"persons\" : [ {\n \"links\" : {\n \"ancestry\" : {\n
|
449
|
+
\ \"href\" : \"https://sandbox.familysearch.org/platform/tree/ancestry?person=KW3B-N99\",\n
|
450
|
+
\ \"title\" : \"Ancestry\"\n },\n \"fs-child-relationships\"
|
451
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/fs-child-relationships\",\n
|
452
|
+
\ \"title\" : \"FamilySearch Person Relationships\"\n },\n \"person\"
|
453
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99\",\n
|
454
|
+
\ \"title\" : \"Person\"\n },\n \"descendancy\" : {\n \"href\"
|
455
|
+
: \"https://sandbox.familysearch.org/platform/tree/descendancy?person=KW3B-N99\",\n
|
456
|
+
\ \"title\" : \"Descendancy\"\n },\n \"discussion-references\"
|
457
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/discussion-references\",\n
|
458
|
+
\ \"title\" : \"Discussion References\"\n },\n \"person-with-relationships\"
|
459
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons-with-relationships?person=KW3B-N99\",\n
|
460
|
+
\ \"title\" : \"Person With Relationships\"\n },\n \"change-history\"
|
461
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/changes\",\n
|
462
|
+
\ \"title\" : \"Change History\"\n },\n \"fs-parent-relationships\"
|
463
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/fs-parent-relationships\",\n
|
464
|
+
\ \"title\" : \"FamilySearch Person Relationships\"\n },\n \"spouse-relationships\"
|
465
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/spouse-relationships\",\n
|
466
|
+
\ \"title\" : \"Person Relationships\"\n },\n \"child-relationships\"
|
467
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/child-relationships\",\n
|
468
|
+
\ \"title\" : \"Person Relationships\"\n },\n \"parent-relationships\"
|
469
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/parent-relationships\",\n
|
470
|
+
\ \"title\" : \"Person Relationships\"\n },\n \"source-references\"
|
471
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/source-references\",\n
|
472
|
+
\ \"title\" : \"Source References\"\n },\n \"notes\" : {\n
|
473
|
+
\ \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/notes\",\n
|
474
|
+
\ \"title\" : \"Notes\"\n },\n \"person-matches\" : {\n \"href\"
|
475
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/matches\",\n
|
476
|
+
\ \"title\" : \"Person Matches\"\n }\n },\n \"id\" : \"KW3B-N99\",\n
|
477
|
+
\ \"living\" : true,\n \"gender\" : {\n \"links\" : {\n \"conclusion\"
|
478
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.1\",\n
|
479
|
+
\ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
|
480
|
+
\"C.1\",\n \"type\" : \"http://gedcomx.org/Male\"\n },\n \"names\"
|
481
|
+
: [ {\n \"links\" : {\n \"conclusion\" : {\n \"href\"
|
482
|
+
: \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.2\",\n
|
483
|
+
\ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
|
484
|
+
\"C.2\",\n \"type\" : \"http://gedcomx.org/BirthName\",\n \"nameForms\"
|
485
|
+
: [ {\n \"lang\" : \"i-default\",\n \"fullText\" : \"API User
|
486
|
+
1241\",\n \"parts\" : [ {\n \"type\" : \"http://gedcomx.org/Given\",\n
|
487
|
+
\ \"value\" : \"API User\"\n }, {\n \"type\" : \"http://gedcomx.org/Surname\",\n
|
488
|
+
\ \"value\" : \"1241\"\n } ]\n } ],\n \"preferred\"
|
489
|
+
: true\n } ],\n \"facts\" : [ {\n \"links\" : {\n \"conclusion\"
|
490
|
+
: {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.3\",\n
|
491
|
+
\ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
|
492
|
+
\"C.3\",\n \"type\" : \"http://gedcomx.org/Birth\",\n \"date\" :
|
493
|
+
{\n \"original\" : \"01 Apr 1950\",\n \"formal\" : \"+1950-04-01\",\n
|
494
|
+
\ \"normalized\" : [ {\n \"value\" : \"1 April 1950\"\n }
|
495
|
+
]\n },\n \"place\" : {\n \"original\" : \"Utah\",\n \"description\"
|
496
|
+
: \"#-1013587259\"\n }\n } ],\n \"display\" : {\n \"name\"
|
497
|
+
: \"API User 1241\",\n \"gender\" : \"Male\",\n \"lifespan\" : \"1950
|
498
|
+
- \",\n \"birthDate\" : \"1 April 1950\",\n \"birthPlace\" : \"Utah\"\n
|
499
|
+
\ }\n } ],\n \"places\" : [ {\n \"id\" : \"-1013587259\",\n \"names\"
|
500
|
+
: [ {\n \"value\" : \"Utah, United States\"\n } ]\n } ]\n}"
|
501
|
+
http_version:
|
502
|
+
recorded_at: Tue, 26 Mar 2013 15:17:02 GMT
|
503
|
+
recorded_with: VCR 2.4.0
|